我必须在我的项目中对数据表进行验证,但它应该在不同的后台线程上运行,而不是在主 UI 线程上运行。一旦完成,它应该在屏幕上显示错误列表。此验证从不同的地方运行,有 6 到 7 个地方可能会导致数据表错误。我编写了以下函数,可以从这 6 到 7 个地方调用它来执行验证:
Thread validationThread = null;
public void RunDataTableValidation()
{
validationThread = new Thread(new ThreadStart(() => validationHandler()));
validationThread.Name = "DataGridValidationThread";
validationThread.IsBackground = true;
validationThread.Start();
}
}
public void validationHandler(Label FakeLabel)
{
try { //all validation code}
finally
{
System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(() => ProcessingDone()));
}
}
void ProcessingDone()
{
if (validationThread != null && validationThread.ThreadState == ThreadState.Stopped)
{
validationThread.Abort();
}
}
我的问题是:每次当它完成工作时我都会中止线程。但是如果当前线程仍在运行并且其他一些代码调用此函数并启动新线程,我也想中止线程。我知道我可以使用 ThreadPool 但请帮助我 - 如何在上面的代码中实现线程池?所以它会在启动新线程之前自动杀死线程池中所有正在运行的线程
编辑:
public void RunDataTableValidation()
{
ThreadPool.QueueUserWorkItem(o =>
{
try
{
validationHandler();
}
catch (NotSupportedException) { }
});
}
public void validationHandler(Label FakeLabel)
{
try
{
foreach (DataRow drRow in this.CurrentDataTable.Rows)
{
}
Thread.Sleep(7000); ( i put sleep right now for testing becoz this code takes few secs becoz of 500+ rows of datagrid
}
finally
{
System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(() => ProcessingDone()));
}
}