1

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

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

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

编辑 1:我正在使用 WPF - XAML,如果这有什么不同的话

4

2 回答 2

1

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

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

  1. 向 backgroundworkersDoWork事件添加一个事件处理程序,它将调用您在 (2.) 中提到的函数
  2. 向您的控件添加一个事件处理程序,该处理程序将在用户输入内容时执行。如果您的控件有,TextBox那么您应该向 event.xml 添加事件处理程序TextChanged
  3. 在上面的事件处理程序中,调用worker.RunWorkerAsync(textBox.Text)

这样处理函数 (2.) 将仅在需要时被调用,并且您不会浪费资源等待两个线程上的用户输入。

于 2012-05-17T10:37:51.310 回答
0

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

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

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

这一切都在一个线程中进行。

于 2012-05-29T05:27:32.047 回答