我有一个背景工作者,应该做两件事
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,如果这有任何区别
答案 0 :(得分:1)
我不认为让你的后台工作线程在循环中等待用户输入是一个好主意。用户界面已经这样做,您应该使用它。
在我看来,你应该这样做:
DoWork
事件添加一个事件处理程序,它将调用您在(2。)中提到的功能。TextBox
,那么您应该向TextChanged
事件添加事件处理程序。worker.RunWorkerAsync(textBox.Text)
这样,只有在需要时才会调用处理函数(2.),并且不会浪费资源等待两个线程上的用户输入。
答案 1 :(得分:0)
这就是我最终做到的方式:
while(string.IsNullOrEmpty(_emailData.CaptchaCurrent))
Thread.Sleep(100);
创建一个变量来存储用户输入,并让线程等待该特定变量具有值。
这一切都在一个主题中继续。