.net 如何为批处理/队列例程实现取消按钮?
我有一个vb.net 2.0程序,它有一个批处理/队列例程来执行需要很长时间的任务。其中一项任务是“上传到ftp”大型文件。用户单击“开始”按钮启动队列,然后for循环只在每个批处理项上运行,并执行它需要的任何操作 现在我想实现一个“取消队列执行”按钮。按钮应该是可点击的(gui不能被正在执行的队列阻塞),并且按钮应该停止当前的队列操作(我不关心以前执行的任务的回滚) 我想我需要单独的线程和某种通知方案,但我应该在什么时候检查通知是否已发送?在队列的for循环中?但是用户必须在中断之前等待文件的完整上传,这不是他想要的。在“文件上传”方法中?直觉上,我觉得在一个方法中放了太多的代码 我还需要对当前批处理项的操作进行一些清理(比如删除部分上传的文件),因此这也必须考虑到某些地方.net 如何为批处理/队列例程实现取消按钮?,.net,.net,我有一个vb.net 2.0程序,它有一个批处理/队列例程来执行需要很长时间的任务。其中一项任务是“上传到ftp”大型文件。用户单击“开始”按钮启动队列,然后for循环只在每个批处理项上运行,并执行它需要的任何操作 现在我想实现一个“取消队列执行”按钮。按钮应该是可点击的(gui不能被正在执行的队列阻塞),并且按钮应该停止当前的队列操作(我不关心以前执行的任务的回滚) 我想我需要单独的线程和某种通知方案,但我应该在什么时候检查通知是否已发送?在队列的for循环中?但是用户必须在中断之前等待文件的
在高级代码或示例中有什么建议吗?提前谢谢 螺纹???????您的问题可以通过使用“BackgroundWorker”解决。我真的很喜欢它,它使这样的任务变得轻而易举 有关详细信息,请尝试以下链接:
注意。一种解决方案是创建一个线程,它执行您希望取消的任何操作,然后在您希望它消失时中止()
// this thread does the cancellable work
Thread actor;
// this is a very simple example, yours will be more complex
public void PerformAction(){
if(actor != null) // this sample code is not reentrant
throw new InvalidOperationException("lol");
actor = new Thread(Work);
actor.Start(); // async
}
// awesome code, dude
private void Work(object state)
{
ImpressiveLibrary.MethodsThatLastForever.DoSomethingAmazing();
}
// kills the actor, if it is not null.
// reentrant, but not thread safe. Can you figure out why?
public void KillAction(){
var foo = actor;
actor = null;
if(foo != null)
foo.Abort();
}
谢谢,在.net中有太多的东西,无法全部了解:)