2010-07-18 145 views
7

我有一个在backgroundworker中运行的任务。点击开始按钮用户启动过程,并有一个取消按钮取消处理。C#后台工作人员

当用户点击取消,我想显示一个消息框“进程尚未完成,你要继续”。

在这里,我想只有在用户输入后才能完成的处理。直到然后想停止背地线。谁可以帮我这个事。无论如何要暂停后台工作一段时间。任何帮助将不胜感激。

回答

5

不是内置的。你可以告诉你的代码(在每个[n]循环迭代中等)检查类似ManualResetEvent的东西是否应该继续运行(同时检查取消)。我不建议暂停线程(Thread.Suspend),因为您不知道当时可能存在哪些锁等。

另一方面...为什么不让它运行,直到你知道它应该被取消?然后你只需要检查取消(没有此标志)每[N] ...迭代

+0

也许处理是CPU密集型的,程序员想在他做出决定时暂时将资源返回给用户。 – 2010-07-18 11:09:42

+0

或后台进程正在做一些不可逆转的事情(删除文件等),如果意外启动,应该快速中断*。 – Heinzi 2010-07-18 16:13:20

2

如果BackgroundWorker的是工作的对象是两个线程可见,你可以“锁定”该对象同时等待用户在对话框中回答问题。这将导致工作线程暂停,直到对话生成线程结束锁定。

+0

这只会在工作线程不断尝试获取锁并释放它时阻塞该工作者。它可能导致** UI **被阻止,如果工作*不*每次释放它。 – 2010-07-18 10:32:06

+0

对,它将取决于工作人员使用对象的方式(何时/是否获取/释放锁)。但是,如果没有根据上述条件(在帖子和评论中)处理现有对象,则可以使用新的“虚拟”共享对象。 – Assaf 2010-07-18 10:38:49