我有问题结合两个任务: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;
}