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)
编辑使其调用辅助方法,使其更清晰.
thread = new Thread(() => { Synchronize(); OnWorkComplete(); });
...
private void OnWorkComplete()
{
Close();
}
Run Code Online (Sandbox Code Playgroud)
如果您查看BackgroundWorker,则会在工作程序完成时调用RunWorkerCompleted事件.
有关BackgroundWorkers的更多信息,请单击此处
要么
完成后,您可以从Thread添加对完整函数的调用,并调用它.
void Synchronize()
{
//DoWork();
//FinishedWork();
}
void FinishedWork()
{
if (InvokeRequired == true)
{
//Invoke
}
else
{
//Close
}
}
Run Code Online (Sandbox Code Playgroud)