2015-04-03 67 views
0

我想同时运行一个函数或同时运行函数A和B,具体取决于相应的复选框c_Ac_B是否被chcecked。我还想通过按停止按钮来停止所有(一个或两个)运行功能。我试过下面的代码。当只有一个chceck盒子被删除时,它就会被启动。当chceckboxes被chcecked时,只有函数A运行。当我按下停止按钮时,运行功能不会停止。同时运行更多功能

private void Start_Click(object sender, EventArgs e) 
     {  
     ThreadStart ts_A = delegate() 
       { 
       }; 
       if (c_A.Checked) 
       { 
        t_A = new Thread(ts_A); 
        t_A.Start(); 
        function_A(); 
       } 

        ThreadStart ts_B = delegate() 
       { 
       }; 
       if (c_B.Checked) 
       { 
        t_B = new Thread(ts_B); 
        t_B.Start(); 
        function_B(); 
       } 
     } 

     private void Stop_Click(object sender, EventArgs e) 
     { 
      t_A.Abort(); 
      t_B.Abort(); 
     } 
+0

您的'ts_A'和'ts_B'指向空的代表。这没有任何用处。如果你想在相应的线程中调用'function_a'和'function_b',然后在这些委托中包装一个调用语句。 – 2015-04-03 05:40:55

+1

请不要**在线程中调用Abort(),除非您正在关闭应用程序。否则调用它是危险的。请阅读以下内容:http://stackoverflow.com/a/1560567/259769 – Enigmativity 2015-04-03 06:04:00

+0

请参阅[“应该在其标题中包含”标签“的问题吗?”](http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles),其中共识是“不,他们不应该”! – 2015-04-03 06:43:29

回答

1

你根本没有在线程中调用你的方法。你实际上是从线程中调用它。

为了在线程中调用它,应该在ThreadStart中传递该方法。

ThreadStart ts_A = new ThreadStart(function_A); 

然后调用t_A.Start会在线程中运行function_A。你可以在这里找到更多关于ThreadStart的信息https://msdn.microsoft.com/en-us/library/system.threading.threadstart%28v=vs.110%29.aspx

说了这么多,你的方法应该看起来像这样。

private void Start_Click(object sender, EventArgs e) 
    {  
    ThreadStart ts_A = new ThreadStart(function_A); 
      if (c_A.Checked) 
      { 
       t_A = new Thread(ts_A); 
       t_A.Start(); 

      } 

       ThreadStart ts_B = new ThreadStart(function_B); 
      if (c_B.Checked) 
      { 
       t_B = new Thread(ts_B); 
       t_B.Start(); 

      } 
    } 
+0

非常感谢。 – kamila 2015-04-07 19:30:37