我想同时运行一个函数或同时运行函数A和B,具体取决于是否复选了相应的复选框c_A
和c_B
。我还想通过按住停止按钮来停止所有(一个或两个)运行功能。我试过以下代码。当只有一个chceck盒被chcecked时,它就会吵架。当两个chceckbox都被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 :(得分:1)
你根本没有在Thread中调用你的方法。你实际上是在线程之外调用它。
为了在线程中调用它,该方法应该在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();
}
}