在c# / Visual Studio中,任何方法都可以在断点上休眠
本文关键字:方法 都可以 断点 休眠 任何 Visual Studio | 更新日期: 2023-09-27 18:09:48
在c#/Visual Studio中遇到断点时,是否有任何方法可以延迟当前线程的执行一段指定时间?休眠后,执行应继续。
我知道VS中有一个"When hit"功能,允许在遇到断点时执行任意代码(主要是将信息打印到控制台),但它非常有限;它不允许把Thread.Sleep
或者任何耗时的操作(比如for
循环)放在那里。也不允许使用委托/lambda函数。
我正在使用Visual Studio 2012。
我有一个需要一次性重新编译的本地解决方案。如果需要的话,我相信它可以被翻译成c#。
定义这个结构:
struct THREAD_DATA
{
int ms;
DWORD id;
THREAD_DATA(DWORD _id, int _ms) : id(_id), ms(_ms) {};
};
和这两个函数:
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);
}
当你在断点上时,使用即时窗口运行:PauseCurrentThread(5000)
或任何你的延迟毫秒应该
如果你想在没有仪器的情况下在多个项目中做到这一点-我可能会开发一个Visual Studio扩展来自动做到这一点。