使用c#中的Stop按钮来停止构建过程
本文关键字:构建 过程 按钮 中的 Stop 使用 | 更新日期: 2023-09-27 17:50:22
我有2个按钮名称为"构建开始"answers"构建停止"。我想要的是当我点击停止按钮,它会停止所有项目的建设的执行。我已经尝试过Backgroundworker类,但当我使用RunworkerAsync()函数时,它将只构建一个项目文件,然后停止执行。这背后的原因是什么?如何解决这个问题?
我有一个字符串数组,它显示具有.sln扩展名的所有项目的列表,并且我通过该数组运行以在.sln文件路径内逐一构建项目。如何构建所有的。sln文件,为什么所有的文件都没有建立时,我使用RunWorkerAsync()。
有没有办法用线程来实现这个?
现在发生的事情是当我单击构建开始按钮时,构建继续,但这不允许我单击停止按钮来停止构建过程。
我附上我的代码:-
private BackgroundWorker backgroundWorker = new BackgroundWorker();
public Form1()
{
InitializeComponent();
cmb_drive.SelectedItem = "Z";
// backgroundWorker.WorkerSupportsCancellation = true;
backgroundWorker.WorkerReportsProgress = true;
backgroundWorker.WorkerSupportsCancellation = true;
backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork);
// backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker_ProgressChanged);
}
private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
// BackgroundWorker worker = sender as BackgroundWorker;
if (checkbox1.Checked)
{
function1();
}
}
private void bn_Start_Click(object sender, EventArgs e)
{
backgroundWorker.RunWorkerAsync();
}
private void bn_Stop_Click(object sender, EventArgs e)
{
backgroundWorker.CancelAsync();
}
void function1()
{
FOLDER1 = DRIVE + @":'Foldername1";
LOGFILE1 = FOLDER1 + @"'Foldername2";
Process msbuild;
msbuild = new Process();
DEVENV = Environment.GetEnvironmentVariable("VS100COMNTOOLS") + @"..'IDE'devenv.exe";
var list = System.IO.Directory.GetFiles(LOGFILE1);
foreach (var item in list)
{
System.IO.File.Delete(item);
}
// Creation of array of string to Build Projects before Building Up.
array[0] = @"'make'versionupdate'versionupdate_vs2010.sln /build Release";
for (int k = 0; k < array.Length; k++)
{
this.lbl_CurrentProject.Text = "Current Project: " + @" " + array[k];
msbuild.StartInfo.UseShellExecute = false;
msbuild.StartInfo.CreateNoWindow = true;
msbuild.StartInfo.Arguments = FOLDER1 + array[k] + @" /out " + LOGFILE1;
msbuild.StartInfo.FileName = DEVENV;
msbuild.Start();
msbuild.WaitForExit();
}
这是我正在执行的代码,但我不能停止在我单击停止按钮时调用的函数中运行的进程。我哪里做错了??请一定让我知道。
谢谢。
现在,我不确定,但我假设您正在构建自己的c# . net应用程序来构建其他。net解决方案(文件扩展名为.sln)。对吧?我相信,你不能点击停止按钮的原因,是你正在主线程上构建,所以GUI很忙。你说你已经尝试在后台工作人员使用,但它不起作用。使用BackgroundWorker来构建解决方案将正确地解决停止按钮问题。如果你想要帮助修复BackgroundWorker,你可能必须提供源代码中不能工作的部分。