我有c#应用程序,它有2个按钮。首先进行循环,运行10k次。并且每个循环代码执行需要1秒才能完成。
for(int i=0;i<10000;i++){
//My running code take 1 sec for each loop
}
有些时候我想在点击另一个按钮&#34;停止&#34;时停止此循环/执行,但它不起作用。请建议我解决方案。
答案 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控件。