2011-11-04 77 views
2

我想從同一個類中的其他函數訪問線程。 例如如何從其他函數訪問線程名稱?

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

+1

'Thread.Abort'是極其危險的,並且不應當被使用。 ('Thread.Stop'不存在) – SLaks

回答

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類,或許你會發現它們對你的情況更有用。

2

您需要將線程存儲在表單中的專用字段中。

您還需要弄清楚如果用戶點擊Start兩次會發生什麼;你可能想要檢查線程是否已經在運行,或者使用線程列表。

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(); 
}