我有一些C#代码写入进度消息到Visual Studio 2010 EnvDTE.OutputWindowPane。该代码是从Visual Studio菜单调用的(它位于VSPackage中)。刷新Visual Studio输出窗口
问题是,直到菜单选取所有处理完成后,输出窗口才会重新绘制,因此输出会一次显示,而不是每次添加时。我怀疑这与在主线程上执行的所有处理有关,因此Visual Studio UI无法重绘。
有没有办法在Visual Studio中“抽取消息”来更新UI - 比如Application.DoEvents()? VSPackage还在项目中插入了一些项目,这似乎是“即时”发生的 - 它只是输出窗口看起来滞后。
我通过各种DTE对象进行了搜索,但未找到任何此功能的候选对象。
这听起来像是正确的解决方案是只是不做处理的UI线程。 – perelman
是的,计划是尝试将处理移动到工作线程,但这需要大量的时间,并且我担心线程安全的某些VS接口是否有线程关联。在已知的安全点推送消息看起来风险较小。 – UweBaemayr
我很困惑你的问题是什么。任何UI更改都应该发生在UI线程上。你可以通过记住'dispatcher = System.Windows.Threading.Dispatcher来确保。CurrentDispatcher'在UI线程的代码中,然后使用'dispatcher'从另一个线程执行任何UI更改(如果要保证邮件按照发送顺序显示,可能还需要一些额外的功能)。 – perelman