Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C#中的停止按钮停止构建过程_C#_Multithreading_Backgroundworker - Fatal编程技术网

使用C#中的停止按钮停止构建过程

使用C#中的停止按钮停止构建过程,c#,multithreading,backgroundworker,C#,Multithreading,Backgroundworker,我有两个按钮名为“构建开始”和“构建停止”。我想要的是,当我点击停止按钮时,它将停止所有项目的建设执行。我尝试过Backgroundworker类,但当我使用RunworkerAsync()函数时,它将只生成一个项目文件,并在此后停止执行。这背后的原因是什么?如何解决这个问题 我有一个字符串数组,它显示扩展名为.sln的所有项目的列表,我通过这个数组逐个构建.sln文件路径中的项目。如何生成所有.sln文件,以及为什么在使用RunWorkerAsync()时所有文件都没有生成 是否有任何方法可以

我有两个按钮名为“构建开始”和“构建停止”。我想要的是,当我点击停止按钮时,它将停止所有项目的建设执行。我尝试过Backgroundworker类,但当我使用RunworkerAsync()函数时,它将只生成一个项目文件,并在此后停止执行。这背后的原因是什么?如何解决这个问题

我有一个字符串数组,它显示扩展名为.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();

       }
private BackgroundWorker BackgroundWorker=new BackgroundWorker();
公共表格1()
{
初始化组件();
cmb_drive.SelectedItem=“Z”;
//backgroundWorker.WorkerSupportsScanCellation=true;
backgroundWorker.WorkerReportsProgress=true;
backgroundWorker.WorkerSupportsScanCellation=true;
backgroundWorker.DoWork+=新的DoworkerVenthandler(backgroundWorker_DoWork);
//backgroundWorker.ProgressChanged+=新的ProgressChangedEventHandler(backgroundWorker\u ProgressChanged);
}
私有void backgroundWorker_DoWork(对象发送方,DoWorkEventArgs e)
{
//BackgroundWorker worker=发件人作为BackgroundWorker;
如果(复选框1.选中)
{
功能1();
}
}
私有void bn\u开始\u单击(对象发送方,事件参数e)
{
backgroundWorker.RunWorkerAsync();
}
私有无效bn\u停止\u单击(对象发送方,事件参数e)
{
backgroundWorker.CancelAsync();
}
无效函数1()
{
FOLDER1=DRIVE+@:“\Foldername1”;
LOGFILE1=FOLDER1+@“\Foldername2”;
进程msbuild;
msbuild=新进程();
DEVENV=Environment.GetEnvironmentVariable(“VS100COMNTOOLS”)+@.\IDE\DEVENV.exe;
var list=System.IO.Directory.GetFiles(LOGFILE1);
foreach(列表中的变量项)
{
System.IO.File.Delete(项目);
}
//创建字符串数组以在生成项目之前生成项目。
数组[0]=@“\make\versionupdate\versionupdate\u vs2010.sln/build Release”;
for(int k=0;k
这是我正在执行的代码,但我无法停止在单击停止按钮时调用的函数中运行的进程。我做错了什么?请务必告诉我


谢谢。

现在,我不确定,但我假设您正在构建自己的C#.Net应用程序,以构建其他.Net解决方案(具有.sln文件扩展名)。对吗? 我相信,你不能点击你的停止按钮的原因,是你在主线程上构建,所以GUI是繁忙的。 您声明您已尝试在BackgroundWorker上使用,但无效。使用BackgroundWorker构建解决方案将很好地解决停止按钮问题。
如果您需要帮助修复BackgroundWorker,您可能必须提供不起作用的部分源代码。

您做错了,我们看不出您做错了。将false传递给@hansPassant,我不想为此使用DTE环境和solutionbuild接口。我有上面的代码,请务必让我知道我的位置错了吗??