[英]Calling a method when thread terminates
我有一個啟動線程的表單。 現在我希望表單在此線程終止時自動關閉。
到目前為止我找到的唯一解決方案是在表單中添加一個計時器,並檢查每個tick上是否存在線程。 但我想知道是否有更好的方法可以做到這一點?
目前我的代碼看起來更像這樣
partial class SyncForm : Form {
Thread tr;
public SyncForm()
{
InitializeComponent();
}
void SyncForm_Load(object sender, EventArgs e)
{
thread = new Thread(new ThreadStart(Synchronize));
thread.IsBackground = true;
thread.Start();
threadTimer.Start();
}
void threadTimer_Tick(object sender, EventArgs e)
{
if (!thread.IsAlive)
{
Close();
}
}
void Synchronize()
{
// code here
}
}
BackgroundWorker類存在於此類線程管理中,以節省您必須自己滾動; 它提供了一個RunWorkerCompleted事件,您可以只聽。
編輯使其調用輔助方法,使其更清晰。
thread = new Thread(() => { Synchronize(); OnWorkComplete(); });
...
private void OnWorkComplete()
{
Close();
}
如果您查看BackgroundWorker,則會在工作程序完成時調用RunWorkerCompleted事件。
有關BackgroundWorkers的更多信息,請單擊此處
要么
完成后,您可以從Thread添加對完整函數的調用,並調用它。
void Synchronize()
{
//DoWork();
//FinishedWork();
}
void FinishedWork()
{
if (InvokeRequired == true)
{
//Invoke
}
else
{
//Close
}
}
看看代理,IAsyncResult,BeginInvoke和AsyncCallback
在線程方法結束時,可以使用Invoke()方法調用Close()(因為大多數WinForms方法應該從UI線程調用):
public void Synchronize()
{
Invoke(new MethodInvoker(Close));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.