2014-09-29 62 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