1

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

不过,现在,根据我在这些文件中遇到的情况,我有时需要先从用户那里得到决定,然后才能继续处理当前文件。

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

这甚至可能与后台工作人员一起使用,还是我需要将该处理逻辑保留在主/UI线程中并以某种方式从那里更新进度条?

我希望你们中的一些人能给我一些提示或指向其他资源,因为我没有找到很多有用的信息来解决我的具体问题。

4

2 回答 2

0

您可以在or上调用ShowDialogof an (这也将创建一个新线程)OpenFileDailog classnew ThreadBackgroundWorker

但是,当您想要传递或更新在主线程上运行的任何属性或控件时,您将需要使用Disptacher类似这样

Dispatcher.BeginInvoke(new Action(() => { YourMethodThatUpdatesSomething(); }));
于 2012-07-31T22:32:48.497 回答
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;
    }

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

于 2012-07-31T22:47:33.037 回答