我想从同一个类中的其他函数访问该线程。 例如
private void timer1_Tick(object sender, EventArgs e)
{
Thread thread1 = new Thread(new ThreadStart(Send1));
thread1.Start();
}
private void stop_btn_Click(object sender, EventArgs e)
{
thread1.Stop();
}
我想从stop_btn_Click事件中访问thead1。这两个函数都在Form1中。
答案 0 :(得分:5)
在类级别而不是方法
上声明private Thread thread1;
class ClassName
{
private Thread workerThread = null;
private void timer1_Tick(object sender, EventArgs e)
{
this.workerThread = new Thread(new ThreadStart(Send1));
workerThread.Start();
}
private void stop_btn_Click(object sender, EventArgs e)
{
this.workerThread.Stop();
}
}
通过查看方法名称timer1_Tick()
,我可以假设您正在模拟计时器行为。看看System.Timers.Timer和System.Threading.Timer类,或许你会发现它们对你的案例更有用。
答案 1 :(得分:2)
您需要将线程存储在表单的私有字段中。
如果用户点击Start
两次,您还需要弄清楚会发生什么。您可能想要检查线程是否已在运行,或使用线程列表。
答案 2 :(得分:1)
你可以把变量放在方法之外(把它作为一个字段移到类中):
private Thread thread1 = null;
void timer1_Tick(object sender, EventArgs e)
{
thread1 = new Thread(new ThreadStart(Send1));
thread1.Start();
}
private void stop_btn_Click(object sender, EventArgs e)
{
if (thread1 != null)
thread1.Stop();
}