Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何为批处理/队列例程实现取消按钮?_.net - Fatal编程技术网

.net 如何为批处理/队列例程实现取消按钮?

.net 如何为批处理/队列例程实现取消按钮?,.net,.net,我有一个vb.net 2.0程序,它有一个批处理/队列例程来执行需要很长时间的任务。其中一项任务是“上传到ftp”大型文件。用户单击“开始”按钮启动队列,然后for循环只在每个批处理项上运行,并执行它需要的任何操作 现在我想实现一个“取消队列执行”按钮。按钮应该是可点击的(gui不能被正在执行的队列阻塞),并且按钮应该停止当前的队列操作(我不关心以前执行的任务的回滚) 我想我需要单独的线程和某种通知方案,但我应该在什么时候检查通知是否已发送?在队列的for循环中?但是用户必须在中断之前等待文件的

我有一个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中有太多的东西,无法全部了解:)