线程终止时调用方法

RaY*_*ell 6 c# methods multithreading asynchronous

我有一个启动线程的表单.现在我希望表单在此线程终止时自动关闭.

到目前为止我找到的唯一解决方案是在表单中添加一个计时器,并检查每个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
    }
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*ham 11

BackgroundWorker类存在于此类线程管理中,以节省您必须自己滚动; 它提供了一个RunWorkerCompleted事件,您可以只听.


Sam*_*ell 6

编辑使其调用辅助方法,使其更清晰.

thread = new Thread(() => { Synchronize(); OnWorkComplete(); });

...

private void OnWorkComplete()
{
    Close();
}
Run Code Online (Sandbox Code Playgroud)


Llo*_*ell 6

如果您查看BackgroundWorker,则会在工作程序完成时调用RunWorkerCompleted事件.

有关BackgroundWorkers的更多信息,请单击此处

要么

完成后,您可以从Thread添加对完整函数的调用,并调用它.

void Synchronize()
{
    //DoWork();
    //FinishedWork();
}

void FinishedWork()
{
if (InvokeRequired == true)
  {
  //Invoke
  }
else
  {
  //Close
  }
}
Run Code Online (Sandbox Code Playgroud)