我正在开发一个WPF项目,我必须从很多单个文件中导入数据。 这些文件及其中的数据的实际导入是在backgroundworker doWork方法中完成的。 它就像一个魅力,工作和更新进度条也很有效。
现在,根据我在这些文件中遇到的情况,我偶尔需要得到用户的决定才能继续处理当前文件。
打开窗口/对话框的最佳方法是什么,将设置的值设置回backgroundworker.doWork方法并继续处理?
这对背景工作者来说是否可行?或者我是否需要在主/ UI线程中保留该处理逻辑并以某种方式从那里更新进度条?
我希望你们中的一些人可以给我一些提示或指出其他资源,因为我没有找到有关我具体问题的有用信息。
答案 0 :(得分:0)
您可以在ShowDialog
或OpenFileDailog class
上调用new Thread
的{{1}}(这也会创建新主题)
但是当你想传递或更新主线程上运行的任何属性或控件时,你需要使用BackgroundWorker
这样的
Disptacher
答案 1 :(得分:0)
后台工作程序在不同的线程中工作。您无法直接从后台线程调用UI。实现您想要做的事情的一种方法是使用标志和Dispatcher来调用用户输入的UI
bool WaitFor_Input = false; //flag to indicate user input status
private void ThreadRun()
{
//THIS IS IN Background worker thread
//do task
WaitFor_Input = true;
//ask for user input
Dispatcher.BeginInvoke(new Action(Show_Dialogue), null);
while (WaitFor_Input); //Background worker waits untill user input is complete
//continue further processing
}
private void Show_Dialogue()
{
//THIS IS IN UI THREAD
//show your dialogue box here, update data variables
//finally set
WaitFor_Input = false;
}
在后台线程中保持处理逻辑实际上是一个好主意。