如何从另一个线程的静态方法更改文本框的文本



我有问题结合两个任务:Dispatcher.Invoke并创建一个对象实例。

我有一个文本框:

<TextBox x:Name="txtuid">

这是静态方法:

static private int onCallback(string Arr, int Len)
{
     MainWindow my = new MainWindow();
     my.txtuid.Text = Arr;
     ....
     return 0;
}

问题是,onCallback在另一个线程中运行,我必须使用 Dispatcher.Invoke作为MainWindow my = new MainWindow(),但是我该怎么做?

您应该设置MainWindow现有实例的Text属性,而不是创建新的属性:

static private int onCallback(string Arr, int Len)
{
    Application.Current.Dispatcher.Invoke(new Action(() =>
    {
        MainWindow my = Application.Current.Windows.OfType<MainWindow>().FirstOrDefault();
        my.txtuid.Text = Arr;
    }));
    return 0;
}

在这种情况下,您将要实例化新的Control而不是修改已经存在的一个最简单的解决方案是使用Application.Current.Dispatcher

static private int onCallback(string Arr, int Len)
{
    Application.Current.Dispatcher.Invoke(new Action(() =>
    {
        MainWindow my = new MainWindow();
        my.txtuid.Text = Arr;
        ....
    }));
    return 0;
}

最新更新