问题很简单我有 GUI c#/xaml 应用程序,我想在一个线程中运行 GUI,在另一个线程中运行一些方法(无限循环)。我需要从第二个线程修改 GUI(列表框)中的元素。我尝试从网络创建全局变量和其他一些技巧,但没有一个运行良好。
现在我有类似的东西:
public delegate void InvokeDelegate(listdata Mujlist);
//in global scope
// and in Window class
public void UpdateList(listdata Mujlist)
{
mujlistbox.DataContext = Mujlist;
}
// and in the second thread this
object[] obj = new object[1];
obj[0] = Mujlist;
mujlistbox.BeginInvoke(new InvokeDelegate(UpdateList), obj);
这可能做得很好,但我不能尝试这个,因为 VS 2010 发现错误
Error 1 'System.Windows.Controls.ListBox' does not contain a definition for 'BeginInvoke' and no extension method 'BeginInvoke' accepting a first argument of type 'System.Windows.Controls.ListBox' could be found (are you missing a using directive or an assembly reference?) D:\..\MainWindows.xaml.cs 85 28 WPFChat
但是 System.Windows.Forms有这种方法,所以我对此感到困惑。
所以,问题是我怎样才能简单地从子线程更新“GUI线程”中的列表框?
我哪里出错了?有更好的方法吗?如何?