初始信息:
我有一种从数据库中获取数据并将其分为逻辑部分的方法(为了简单起见,我们只想说这个数字总是8个不等的部分)。对于每个部分,我启动一个新的背景线程将数据写入数据库。
这样做,我最终将使用8个异步线程运行,所有这些都使用相同的_dowork()和_runworkerCompleted()方法。
启动线程时,将立即添加一个背景工人列表。在_runworkercompleted()方法中,我从列表中删除该背景工人,并检查背景工人列表是否计数为0;如果不是,我继续,如果是这样,那么我必须让用户知道操作已经完成。
问题:
在任何线程启动之前,我都会调用鼠标。为了显示等待光标。一切完成后,我必须调用鼠标。Overridecursor= null;为了强迫鼠标光标返回其正常状态。
但是,当我在if语句中的_runworkerCompleted()方法中调用此措施时,询问BW列表是否计数为0时,我会得到一个运行时的例外,说明另一个线程拥有该对象。
如何调用鼠标。毕竟所有线程都没有运行时例外?
注意:
尝试从_runworkercompleted()方法显示一个消息框时,我也遇到了同样的问题。我以为_runworkercompleted()在UI线程上?
任何帮助将不胜感激。
p.s。通过发布太多代码来混淆任何人)。
问:
kyle
当您调用runworkercomplet的方法时,如果需要更新UI,则必须使用此类调度程序才能在UI线程中进行更新:
this.Dispatcher.Invoke(() =>
{
// YOUR UI UPDATE
});