使用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#中的Stop按钮来停止构建过程

现在,我不确定,但我假设您正在构建自己的c# . net应用程序来构建其他。net解决方案(文件扩展名为.sln)。对吧?我相信,你不能点击停止按钮的原因,是你正在主线程上构建,所以GUI很忙。你说你已经尝试在后台工作人员使用,但它不起作用。使用BackgroundWorker来构建解决方案将正确地解决停止按钮问题。如果你想要帮助修复BackgroundWorker,你可能必须提供源代码中不能工作的部分。