0

我正在寻找执行此操作:

Deployment.Current.Dispatcher.BeginInvoke(() =>
        {
            ... // do some UI specific stuff
        });

但是,我不想将 lambda 表达式发送到 UI 线程,而是想将其发送给后台工作人员。

情况就是这样,我有一个消息框,我需要知道它的响应是否要进行一些额外的处理(在这种情况下是复制文件)。

怎么能做到这一点?我愿意接受不包括 lambda 表达式调度的各种重构解决方案。

谢谢阅读

4

2 回答 2

0

如果我正确理解你的问题,你会看到这样的东西。首先在 UI 线程上显示一个消息框,等待结果,如果需要,将一些工作分派到后台线程:

Deployment.Current.Dispatcher.BeginInvoke(() =>
        {
            //Show messagebox
            var result = MessageBox.Show("Question?", "Title", MessageBoxButton.OKCancel);

            //Check messagebox result
            if (result == MessageBoxResult.OK)
            {
                ThreadPool.QueueUserWorkItem(x =>
                {
                    //Do some work, transfer a file
                });
            }
        });
于 2013-09-04T09:30:03.177 回答
0

MessageBox 在 UI 线程上运行,因此当它从其模式显示返回时,您就在 UI 线程上。此时分派给 UI 分派器是没有意义的。

您希望在后台线程(例如,ThreadPool.QueueUserWorkItem,通过任务等)上运行您的 lambda,然后在完成时使用调度程序返回 UI 线程。但是您需要来自 UI 线程的调度程序;不确定它是否与您在代码中提到的不同。

于 2013-09-04T12:42:41.903 回答