我有一些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