我有一个代码,当你点击开始时,为了安全起见,必须禁用一些控件...:
Thread t = new Thread(() => MyMethod(text));
button1.Enabled = false;
textBox2.Enabled = false;
button2.Enabled = false;
t.Start();
这不是问题。
我的问题是我应该把所有这些都重新打开,我的意思是当MyMethod
结束时,我必须Invoke
我要启用它们的所有控件。
MyMethod(string text){
.
.
.
button1.Invoke(new MethodInvoker(delegate{ button1.Enabled=true; }));
textBox2.Invoke(new MethodInvoker(delegate{textBox2.Enabled=true; }));
button2.Invoke(new MethodInvoker(delegate{ button2.Enabled=true; }));
}
因此,如果我们有一堆控件集,那么很难在线程中更改它们的值。
无论如何更容易或更快地访问这些?
谢谢,
答案 0 :(得分:1)
在单独的线程中调用方法之前存储当前的调度程序。
var uiDispatcher = System.Windows.Threading.Dispatcher.CurrentDispatcher;
在MyMethod中使用Dispatcher,例如:
void MyMethod(Dispatcher uiDispatcher)
{
...
uiDispatcher.Invoke(() =>
{
button1.Enabled = true;
button2.Enabled = true;
...
});
}