如何使用按钮停止长时间循环

时间:2015-06-23 07:51:42

标签: c# winforms

我有c#应用程序,它有2个按钮。首先进行循环,运行10k次。并且每个循环代码执行需要1秒才能完成。

    for(int i=0;i<10000;i++){
      //My running code take 1 sec for each loop
    }

有些时候我想在点击另一个按钮&#34;停止&#34;时停止此循环/执行,但它不起作用。请建议我解决方案。

2 个答案:

答案 0 :(得分:3)

String Path3= "/storage/extSDCard/DCIM/Camera/fred.jpg"; File to = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "Barr.jpg"); File oldFile = new File (Path3); oldFile.renameTo(to); (处理所有UI事件的线程 - 例如按钮点击)中运行长时间运行的操作并不是一个好习惯。你应该在另一个循环中运行你的循环。

您可以使用UI Thread

Task Parallel Library (TPL)

答案 1 :(得分:1)

最简单的解决方案(不是最好的)是将@echo off setlocal enableextensions disabledelayedexpansion set "destinationRoute=d:\SVN\Project\Debug\General\Admin Project" for %%a in ("%destinationRoute%\..") do set "sourceRoot=%%~fa\ServicePortal\bin" echo %sourceRoot% 添加到循环中以处理按钮事件:

Application.DoEvents()

更好,更简单的解决方案是使用异步private bool cancel; public void loop() { for(int i=0;i<10000;i++){ //My running code take 1 sec for each loop Application.DoEvents(); if (cancel) break; } } public void cancelButton_Click(object sender, EventArgs e) { cancel=true; } (其余代码保持相同的减去Task调用):

Application.DoEvents()

请注意,在这种情况下,您应该使用private void loopButton_Click(object sender, EventArgs e) { new Task(loop).Start(); } 从循环访问UI控件。