0

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

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

2 回答 2

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";
}
于 2014-07-06T14:58:36.490 回答
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 questionDispatcher 的 MSDN 文档

于 2014-07-06T14:59:38.617 回答