如何从其他功能访问线程名称?

时间:2011-11-04 13:45:28

标签: c# .net multithreading

我想从同一个类中的其他函数访问该线程。 例如

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中。

3 个答案:

答案 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.TimerSystem.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();
}