我有一個WPF & C#應用程序,它包含一個大型DataGrid,大約35列x 50行,用於監視一組頻繁變化的值。麻煩的是,當整個網格可見時,刷新它會將用戶界面掛起幾秒鐘。我每隔兩秒鐘就會明確刷新一次,這對我正在做的事很好,但讓用戶界面的其餘部分掛起是一個真正的痛苦。多線程,多分派器WPF應用程序仍然繪製單線程?
好的,所以我決定我將在單獨的窗口中使用單獨的Dispatcher在單獨的窗口中運行其餘的UI。我寫了一個玩具窗口,其中包含一個帶有增量計數的textBlock,使用DispatcherTimer每秒更新10次。但是,計數不會平穩遞增,而會在網格刷新時暫停,然後繼續顯示,計數高於暫停時的計數約10,因此計時器事件得到處理。我只是沒有看到刷新。
WPF是否只在單個線程中繪製其所有元素?任何方式呢?
這裏是我的第二窗口創建代碼:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
ThreadStart ts = new ThreadStart(RunSpareThread);
m_spare_thread = new Thread(ts);
m_spare_thread.IsBackground = true;
m_spare_thread.Priority = ThreadPriority.Highest;
m_spare_thread.SetApartmentState(ApartmentState.STA);
m_spare_thread.Start();
Dispatcher.Thread.Priority = ThreadPriority.Lowest;
}
void RunSpareThread()
{
m_spare_window = new SpareWindow();
m_spare_window.Show();
Dispatcher.Run();
}
FYI我已經試過落實電網幾種不同的方式 - 作爲一個ListView,因爲它覆蓋的OnRender和繪製一大堆GlyphRunDrawings的帆布 - WPF在繪製這些東西時速度非常慢。