繁体   English   中英

调用对话框并在backgroundworker中从中获取值?

[英]calling dialog and getting values from it in backgroundworker?

我正在一个WPF项目中,我必须从许多单个文件中导入数据。 这些文件及其中的数据的实际导入是通过backgroundworker doWork方法完成的。 它就像一个咒语,可以完成工作,并且更新进度条也可以完美地工作。

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

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

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

我希望你们中的一些人能给我一些提示或指向其他资源,因为我没有找到有关我的特定问题的有用信息。

您可以在new ThreadBackgroundWorker上调用OpenFileDailog classShowDialog (这也会创建一个新的线程)

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

Dispatcher.BeginInvoke(new Action(() => { YourMethodThatUpdatesSomething(); }));

后台工作者在另一个线程中工作。 您不能直接从后台线程调用UI。 实现您要执行的操作的一种方法是使用标志和分派器调用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;
    }

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM