2015-08-26 17 views
6

Geçerli iş parçacığının belirli bir süre için C#/Visual Studio'da bir kesme noktasını vurduğunda yürütülmesini geciktirmenin bir yolu var mı? Uykudan sonra yürütme devam etmelidir. Orada olduğunu biliyorumC#/Visual Studio'da bir kesme noktasında uyumak için herhangi bir yol?

bir kesme noktası vururken rasgele kod yürütmesine olanak VS özelliği (öncelikle konsola bilgi yazdırmak için) "vurduğunda" ama bu çok sınırlı olması; Thread.Sleep'u veya herhangi bir zaman alıcı işlemi (for döngüleri gibi) koymaya izin vermez. Delegeler/lambda işlevleri de izin verilmez. Ben Visual Studio 2012.

+1

Ben Neden direkt olarak kodunuzda uyku koymayın ... Bunu yapabilir şüphe? –

+0

@Thomas ekleme - belki bir yapı ile: 'halinde (System.Diagnostics.Debugger.IsAttached && maybeSomeOtherCondition) {// Uyku} '. – Corak

+0

Kesme noktası ifade değerlendiricisinin, kesme noktasında içeriği kullandığını düşünüyorum. Programınız, ara noktanızdaki işlevden erişilebilen bir uyku yapan bir işleve sahip olsaydı, bunu çağırabilirdiniz (belki de bir kukla int değeri döndürdüyse?) Fakat bu kodunuzu değiştirmenizi gerektirebileceğinden peşindesin. –

cevap

0

ile çalışıyorum

Ben bir defalık recompile gerektiren doğal çözünürlüğe sahiptir. Gerekirse C# 'ye çevrilebileceğine eminim.

struct THREAD_DATA 
{ 
    int ms; 
    DWORD id; 
    THREAD_DATA(DWORD _id, int _ms) : id(_id), ms(_ms) {}; 
}; 

ve bu iki işlevi: Eğer kırılma noktasında olduğunda

DWORD WINAPI PauseThread(LPVOID p) 
{ 
    THREAD_DATA* ptd = (THREAD_DATA*)p; 
    HANDLE target = OpenThread(THREAD_SUSPEND_RESUME, FALSE, ptd->id); 
    SuspendThread(target); 
    Sleep(ptd->ms); 
    ResumeThread(target); 
    delete p; 
    return 0; 
} 
void PauseCurrentThread(int ms) 
{ 
    THREAD_DATA* ptd = new THREAD_DATA(GetCurrentThreadId(), ms); 
    HANDLE h = CreateThread(NULL, 0, &PauseThread, (LPVOID)ptd, 0, 0); 
} 

, çalıştırmak için komut penceresini kullanın:

bu yapıyı tanımlamak milisaniye cinsinden PauseCurrentThread(5000) veya ne olursa olsun gecikme gerektiğini olmak.

Eğer enstrümantasyon olmadan birden projede bunu yapmak istiyorsan - Ve muhtemelen automagicallylar bunu yapmak için Visual Studio uzantısı geliştirebilir.

İlgili konular