在线程上等待UI活动

时间:2014-11-11 18:36:41

标签: c# wpf multithreading

我已经阅读了很多关于线程的内容但是无法找到一种方法来使这个工作正常。所以应该明白如何做到这一点,因为它通常与我(总是缺少显而易见的):p

这是我的问题(顺便说一句,我在WPF中使用C#):

我有一个漫长的运行过程,我在一个单独的线程上运行,而UI保持负责并显示进化。但是,在进程中,我需要让用户在继续之前确认一个值。这是我无法弄清楚的,导致窗口确认值必须在UI线程中运行,并仍然将值返回到工作线程,以便它可以继续它的工作。 / p>

因此...

Long running process beeing run in work thread
Work thread waits for UI Thread
    UI thread shows the confirmation window
    User confirms/fixes value and closes the confirmation window
    UI thread sends result from confirmation window to work thread
work thread gets values from UI Thread (value was changed by user? to what?)
work thread continues long running process
Work thread gets values from confirmation window

我已经使用ThreadPool完成了工作线程 - 虽然我可以通过不同的方式使用线程(NET 4.5)。我遇到的问题是,如果我将确认窗口部分发送给调度员,我的工作线程将不会等待来自确认窗口的结果。如果我没有放入调度程序,我会在调用窗口构造函数时得到一个关于不在STA线程中的异常。

欢迎任何想法

1 个答案:

答案 0 :(得分:1)

你可能不想阻止在UI上等待的工作线程(不是说你不能这样做,但它会很乱)。

一个更简单的解决方案是将您的流程拆分为两个线程;一个运行用户前输入,一个运行之后。您将在第一个线程完成时(通过回调或事件)提示用户。

像(伪代码)

之类的东西
InitialThreadObject.Completed += () =>
  {
      PromptForUI();
      SecondThreadObject.Start();
  } 
InitialThreadObject.Start();

显然,您会根据当前代码选择完成通知机制。