2011-05-17 74 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)

上运行。