当所有线程完成时,如何覆盖光标



初始信息:

我有一种从数据库中获取数据并将其分为逻辑部分的方法(为了简单起见,我们只想说这个数字总是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
            });

最新更新