如何将lambda表达式分派给后台(非UI)线程?

时间:2013-09-03 21:12:19

标签: c# .net multithreading windows-phone-8 windows-phone

我希望执行此操作:

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

但是我没有将lambda表达式发送到UI线程,而是将其发送给后台工作者。

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

如何实现这一目标?我愿意接受一种不包含lambda表达式调度的重构解决方案。

感谢您阅读

2 个答案:

答案 0 :(得分: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
                });
            }
        });

答案 1 :(得分:0)

MessageBox在UI线程上运行,因此当它从其模态显示返回时,您就在UI线程上。此时调度到UI调度程序没有意义。

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