2014-09-29 63 views
0

我有一個WPF應用程序,其中我有一個MainWindow在UI線程下。我創建了一個線程,在其中創建另一個窗口。我必須在一個線程中創建這個窗口,因爲它必須不斷更新。我想讓這個窗口的主人成爲MainWindow。所以我使用Dispatcher.Invoke來設置這個窗口的所有者。跨線程錯誤/無響應的UI

但是,當我使用Dispatcher.Invoke從線程2訪問主UI線程,我得到一個跨線程訪問異常。

我會很快發佈一些示例代碼。在此之前,如果有人有任何想法,請分享。

這是我的,而我認爲實施上述辦法的實際問題:

我有三個折線圖中,4號線系列每一個窗口,在裏面我是用做一個100毫秒的間隔更新Dispatcher.Invoke。因此,UI有時會變得緩慢且無響應

+2

您意識到需要連續更新窗口不會與在「MainWindow」相同的線程中創建窗口相矛盾? – 2014-09-29 11:22:27

回答

3

我創建了一個線程,在其中創建另一個窗口。

這已經不是一個好主意,並且容易出現很多問題。應用程序中的所有窗口都應該由主「GUI」線程創建。

我必須在一個線程中創建此窗口,因爲它必須不斷更新。

有方法可以在另一個線程上創建窗口而不用創建窗口。在主線程上創建窗口,然後使用後臺線程進行更新。該後臺線程可以使用Dispatcher.Invoke更新新窗口。

+0

感謝您的回覆。你給出的是我目前實施的。我在窗口中有三個折線圖,每隔100 ms更新一次,我正在使用'Dispatcher.Invoke'。因此,用戶界面有時會變得緩慢且無響應。 – Abhishek 2014-09-29 11:42:06

+3

一般來說,從另一個線程訪問UI線程是不好的,但這很可能,但是很糟糕。 你應該在一個線程中做你的100ms的東西,只是更新你的數據結構。然後,例如,每隔1000毫秒,您就可以使用準備顯示的數據更新您的用戶界面。 – user743414 2014-09-29 11:52:28

+2

@Ahishek「user743414」是正確的。每100ms更新一次圖表就沒有意義了。經常更新數據 - 如果您甚至需要這樣做 - 並定期更新UI。 – vcsjones 2014-09-29 13:56:46