我有一个关于线程的问题。
我有一个 WPF 应用程序,它应该显示某些查询的状态。为此,我创建了一个类,它在多个线程(后台 worker )中运行多个查询。我还创建了一个事件,因此我可以在查询运行时使用react。
private void cmdStart(object sender, RoutedEventArgs e)
{
QuerySetup qs = new QuerySetup();
//Filling qs with some data
//...
SqlProxy sql = new SqlProxy();
sql.QueryCompleted += new SqlProxy.QueryCompletedEventHandler(sql_QueryCompleted);
//Starts the backgroundworker
sql.RunSQL(qs);
}
private void sql_QueryCompleted(QueryResult qr)
{
lstStatus.Items.Clear();
lstStatus.Items.Add(qr.RuntimeTotal);
//... and some more...
}
现在我收到一条错误消息,告诉我我无法访问 lstStatus,因为它属于不同的线程。
但是为什么?该事件不应该与 GUI 在同一个线程中吗?我该如何解决我的问题?
最佳答案
没有。
大多数非 UI 组件将在非 UI 线程(通常是 ThreadPool 线程)中引发回调
您可以调用 Dispactcher.BeginInvoke
在 UI 线程上运行代码:
Dispactcher.BeginInvoke(new Action(delegate {
...
}));
关于c# - 事件在错误的线程中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13160140/