我在结束一组动态创建的线程时遇到了一些麻烦。我需要在任何给定点结束所有这些的原因是我可以刷新表单的某些部分并创建新的部分。这是一个简单的场景来展示我的线程中发生的事情。
许多线程是根据就地某些变量动态创建的:
for (int i = 0; i <= mDevices.Count; i++)
{
ThreadStart workerThread = delegate { pollDevices(mDevices[i - 2], this); };
new Thread(workerThread).Start();
}
public void pollDevices(IDeviceInterface device, DeviceManager mainUI)
{
System.Timers.Timer timer = null;
if (timer == null)
{
timer = new System.Timers.Timer(1000);
timer.Elapsed += delegate(object sender, ElapsedEventArgs e) { timerElapsed(sender, e, device, mainUI); };
}
timer.Enabled = true;
public void timerElapsed(object sender, ElapsedEventArgs e, IDeviceInterface device, DeviceManager mainUI)
{
device.connect(device, this);
//wait till thread finishes and destroy
Thread.CurrentThread.Abort();
}
然后这些线程从计时器工作,并触发一个事件,该事件处理 UI 更新等。但是,当我尝试刷新 UI 时(例如,如果需要考虑数据库中的任何更多条目),如果线程仍在运行,则删除表单上的按钮(这些按钮已分配给线程)会出错,所以之前我呼吁刷新我需要以这种方式停止所有当前线程。
所以我的问题是,如何在刷新 UI 之前中止这组线程?