Backgroundworker等待用户填写GUI中的字段

时间:2012-05-17 10:21:23

标签: c# wpf backgroundworker

我有一个背景工作者,应该做两件事 1.将用户控件添加到GUI
2.读取用户在sed usercontrol中输入的值并将其传递给函数
做这个的最好方式是什么?

我正在考虑将2个事件处理方法传递给DoWork事件 第一个处理点号1,第二个处理点号2.
然后我会这样做:
1. inside worker.ProgressChanged事件 - worker将usercontrol添加到页面
2. inside worker.ProgressChanged事件 - 在while循环中,worker等待填写所需的ui值 3.在worker.RunWorkerCompleted事件内 - 告诉工作人员执行任务编号2.

这是正确的做法吗? 如果不是这样做的最佳方法是什么?
如果这是正确的方法,那么工人等待价值的最佳方式是什么? 只是一个内部睡眠的循环或是否有更复杂的方法?
先感谢您。

编辑1:我正在使用WPF - XAML,如果这有任何区别

2 个答案:

答案 0 :(得分:1)

我不认为让你的后台工作线程在循环中等待用户输入是一个好主意。用户界面已经这样做,您应该使用它。

在我看来,你应该这样做:

  1. 向backgroundworkers DoWork事件添加一个事件处理程序,它将调用您在(2。)中提到的功能。
  2. 向您的控件添加一个事件处理程序,该处理程序将在用户输入内容时执行。如果您的控件具有TextBox,那么您应该向TextChanged事件添加事件处理程序。
  3. 在上面的事件处理程序中,调用worker.RunWorkerAsync(textBox.Text)
  4. 这样,只有在需要时才会调用处理函数(2.),并且不会浪费资源等待两个线程上的用户输入。

答案 1 :(得分:0)

这就是我最终做到的方式:

while(string.IsNullOrEmpty(_emailData.CaptchaCurrent))
    Thread.Sleep(100);

创建一个变量来存储用户输入,并让线程等待该特定变量具有值。

这一切都在一个主题中继续。