C# 从一个线程访问多个控件
C# Accessing to multiple controls from a thread
我有一个代码,当您单击开始时,为了安全起见,必须禁用一些控件...:[=14=]
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; }));
}
所以如果我们有一堆控件集,很难在线程中更改它们的值。
有没有更简单或更快的方式访问这些?
谢谢,
在单独的线程中调用您的方法之前存储当前的调度程序。
var uiDispatcher = System.Windows.Threading.Dispatcher.CurrentDispatcher;
在您的 MyMethod 中使用 Dispatcher,例如:
void MyMethod(Dispatcher uiDispatcher)
{
...
uiDispatcher.Invoke(() =>
{
button1.Enabled = true;
button2.Enabled = true;
...
});
}
我有一个代码,当您单击开始时,为了安全起见,必须禁用一些控件...:[=14=]
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; }));
}
所以如果我们有一堆控件集,很难在线程中更改它们的值。
有没有更简单或更快的方式访问这些?
谢谢,
在单独的线程中调用您的方法之前存储当前的调度程序。
var uiDispatcher = System.Windows.Threading.Dispatcher.CurrentDispatcher;
在您的 MyMethod 中使用 Dispatcher,例如:
void MyMethod(Dispatcher uiDispatcher)
{
...
uiDispatcher.Invoke(() =>
{
button1.Enabled = true;
button2.Enabled = true;
...
});
}