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;
    ...
                });
}