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

时间:2017-06-02 08:54:47

标签: c# wpf multithreading static textbox

我在组合两个任务时遇到了问题: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(),但我该怎么办呢?

2 个答案:

答案 0 :(得分:1)

在这种情况下,如果您要实例化新的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; }

ERROR in [at-loader] ./src/app/app.ts:6:13
   TS2304: Cannot find name 'require'.

答案 1 :(得分:1)

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

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