C# 显示一个";请稍等;非线程安全任务的对话框
我正在使用第三方库,库中的一些函数需要很长时间才能执行,因此我希望在函数繁忙时显示“请稍候”对话框 通常我会这样做:C# 显示一个";请稍等;非线程安全任务的对话框,c#,dialog,multithreading,pleasewait,C#,Dialog,Multithreading,Pleasewait,我正在使用第三方库,库中的一些函数需要很长时间才能执行,因此我希望在函数繁忙时显示“请稍候”对话框 通常我会这样做: Thread longTask = new Thread (new ThreadStart(LongTask)); longTask.IsBackgroud = true; longTask.Start(); pleaseWaitForm = new PleasWaitForm ("Please wait for task to complete"); pleaseWaitFo
Thread longTask = new Thread (new ThreadStart(LongTask));
longTask.IsBackgroud = true;
longTask.Start();
pleaseWaitForm = new PleasWaitForm ("Please wait for task to complete");
pleaseWaitForm.ShowDialog();
void LongTask()
{
// Do time consuming work here
pleaseWaitForm.CanCloseFlag = true;
}
不幸的是,第三方库不是线程安全的。有解决办法吗?有没有办法将对话框作为后台任务进行管理?您非常需要构建自己的对话框 一个选项是在计时器等中轮询您的
completed
标志
另一种选择是让表单“拥有”任务,并使用
BackgroundWorker
进行进度和完成通知。假设您有一个方法,LongTask,并且它不是线程安全的。如果该方法正在运行且不需要任何共享变量,那么您可以简单地将其包装在BackgroundWorker
中,并在任务完成时更新“请稍候”屏幕
如果某个方法不是线程安全的,这仍然意味着在线程中使用它是安全的,这取决于它是异步运行多次(危险!)还是同步运行多次(不是问题)。我想你误解了“线程安全”的含义。如果只从单个线程调用第三方组件的方法/属性,那么该组件不必是线程安全的。见文章 此外,我建议您在这种情况下使用一个类
HTH什么是线程不安全?你的问题似乎与此无关。请您详细说明一下。如果它不是线程安全的,那么它只是意味着它不能一次被多个线程可靠地使用。看起来您运行的是单个后台线程,所以应该可以。您是否遇到了某种错误/竞争条件,导致您对设计进行二次猜测?