在后台工作者中调用对话框并从中获取值?

时间:2012-07-31 22:20:57

标签: c# wpf dialog backgroundworker dispatcher

我正在开发一个WPF项目,我必须从很多单个文件中导入数据。 这些文件及其中的数据的实际导入是在backgroundworker doWork方法中完成的。 它就像一个魅力,工作和更新进度条也很有效。

现在,根据我在这些文件中遇到的情况,我偶尔需要得到用户的决定才能继续处理当前文件。

打开窗口/对话框的最佳方法是什么,将设置的值设置回backgroundworker.doWork方法并继续处理?

这对背景工作者来说是否可行?或者我是否需要在主/ UI线程中保留该处理逻辑并以某种方式从那里更新进度条?

我希望你们中的一些人可以给我一些提示或指出其他资源,因为我没有找到有关我具体问题的有用信息。

2 个答案:

答案 0 :(得分:0)

您可以在ShowDialogOpenFileDailog 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;
    }

在后台线程中保持处理逻辑实际上是一个好主意。