代码之家  ›  专栏  ›  技术社区  ›  supercat

当非UI线程在调试器中停止时,有什么方法可以短暂地运行UI线程?

  •  3
  • supercat  · 技术社区  · 14 年前

    在使用Visual Studio 2010调试后台线程时,有没有更好的方法可以让其他线程运行几百毫秒左右,而不前进位于断点处的线程?等效于在当前行之前插入“threading.thread.sleep(100)”,在其中设置下一条语句,然后点击resume(但不破坏正在调试的代码)?我的数据包日志记录/显示代码没有它可能的那么有用,因为调试器经常会在我的代码对数据包的操作时间和UI成功显示数据包的时间之间遇到断点。

    我知道可以进入线程窗口,冻结命中断点的线程,点击运行,点击暂停,解冻命中断点的线程,但这确实很笨拙。有更顺畅的方法吗?

    (编辑)我想知道为什么没有回应?我不敢相信我是唯一一个尝试调试非UI线程的人。

    1 回复  |  直到 14 年前
        1
  •  3
  •   Dean Taylor    14 年前

    我会用一个 在Visual Studio中完成您概述的操作。

    它应该是一个简单的宏记录问题。( Tools , Macros , Record TemporaryMacro )在正确的时间点,然后保存它。

    您可以随时添加图标/键盘快捷方式,以便以后再次运行宏。

    或者甚至将源代码调整为宏,以确保它完全按照需要执行操作。

    编辑1: 作为提示,我可以想象代码看起来有点像这样(没有测试):

        Dim t As Thread
        t = DTE.Debugger.CurrentThread
        t.Freeze()
        DTE.Debugger.Go(False)
        Beep()
        Threading.Thread.Sleep(5000)
        Beep()
        DTE.Debugger.Break(True)
        DTE.Debugger.CurrentThread = t;
        t.Thaw()
    

    编辑2: 您可能需要参考以下内容: EnvDTE.Debugger

    标准进口供参考:

    Imports System
    Imports EnvDTE
    Imports EnvDTE80
    Imports EnvDTE90
    Imports EnvDTE90a
    Imports EnvDTE100
    Imports System.Diagnostics