我有2个按钮名称为“Build Start”和“Build Stop”。我想要的是当我点击停止按钮时,它将停止执行所有项目的构建。我已经尝试了Backgroundworker类,但是当我使用RunworkerAsync()函数时,它只会构建一个项目文件并在此后停止执行。这可能是背后的原因,以及如何解决这个问题。在C#中使用停止按钮来停止构建过程
我有一个字符串数组,用.sln扩展名显示所有项目的列表,我运行这个数组来构建一个一个一个地位于.sln文件路径中的项目。如何构建所有.sln文件,以及为什么当我使用RunWorkerAsync()时,所有文件都不会生成。
有什么办法可以使用线程来实现这个。
现在发生的事情是,当我单击Build Start按钮构建继续时,但这不允许我单击Stop按钮来停止构建过程。
我兹附上我的代码: -
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();
}
这里是我执行的代码,但是当我点击停止按钮我不能停止这是在调用该函数运行的进程。我在哪里做错了?请让我知道。
谢谢。
你做错了,我们看不到你做错了。将* false *传递给[Build method](https://msdn.microsoft.com/en-us/library/envdte.solutionbuild.build.aspx)。 –
@hansPassant,我不想为此使用DTE环境和solutionbuild接口。 – tdesai