2011-05-17 113 views
0

我有一個非常複雜的WPF應用程序,其中顯示和處理的頁面位於dll中。迄今爲止,這工作得很好。WPF線程問題

我在應用程序的主頁中設置了一個定時器,用於查找從外部源進入的通信。當我得到一個通信(我不明白添加混淆),我解析它,如果消息是「xyx」,我需要啓動XYL dll的用戶界面。我得到的調用線程必須是sta,因爲許多ui組件都需要這個。 我看到網絡上的寫作有關不得不調用Invoke(),我不能使用工作線程,而是使用後臺線程。

我的問題是我使用的System.Timers.Timer?這是否導致工作者線程?我不知道在我的電話中,我需要啓動一個線程來運行此操作(或如何處理它)。

有什麼建議嗎?

回答

0

System.Timers.Timer在工作線程上運行,無法訪問UI元素。有關這方面的更多信息,請參閱herehere

可以使用這種計時器,您只需在觸摸UI部件之前回到UI(調度程序)線程即可。您可以通過調用Dispatcher.InvokeDispatcher.BeginInvoke並傳入要運行的委託來完成此操作。這會將新的UI片段添加到您的原始UI線程中。如果你想讓它們在自己的UI線程上運行(也許在不同的窗口中),那麼你需要自己設置它。

+0

蒂姆 - 這已經幫了很多。你給了我一個更清晰的見解,我能夠解決這個問題。謝謝!! – Jeff 2011-05-17 18:18:59

+0

@Jeff - 沒問題。 – Tim 2011-05-17 18:20:16

0

定時器通常在MTA的線程池線程上運行。

改爲使用DispatcherTimer或使用Dispatcher.Invoke。如果你想DLL的用戶界面上,你需要自己創建線程並將其設置爲STA不同的線程運行DLL的UI隨後將在同一線程作爲主頁的UI(這是STA)

上運行。