C#wpf调度员混乱

时间:2014-07-06 14:43:36

标签: c# wpf dispatcher invokerequired

我应该如何将此代码移植到wpf?

public void ChangeTextBox(string txt)
    {
        if (textBox1.InvokeRequired)
        {
            Invoke(new UpdateText(ChangeTextBox), new object[] { txt });
        }
        else
        {
            textBox1.Text += txt + "\r\n";
        }
    }

2 个答案:

答案 0 :(得分:0)

您可以简单地使用控件的Dispatcher类或应用程序级别Dispatcher,但在您的情况下,您需要控件的调度程序。另外,请注意,我不必递归调用调用方法来调用它。我只需将textBox.Text设置为您想要的值即可。

它会在幕后执行Context switch,从而允许您的控件被修改,因为它被调度到自己的调度程序。

if(!textBox1.Dispatcher.CheckAccess())
{
 textbox1.Dispatcher.Invoke(new Action(() => textBox.Text += txt + "\r\n";);
}
else
{
 textBox.Text += txt + "\r\n";
}

答案 1 :(得分:0)

你应该可以这样做:

public void ChangeTextBox(string txt)
    {
        if (!textBox1.Dispatcher.CheckAccess())
        {
            textBox1.Dispatcher.Invoke(new UpdateText(ChangeTextBox), new object[] { txt });
        }
        else
        {
            textBox1.Text += txt + "\r\n";
        }
    }

此答案基于SO questionMSDN Documentation for Dispatcher