簡體   English   中英

線程終止時調用方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM