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

本文关键字:UI 线程 后台 lambda 表达式 分派 | 更新日期: 2023-09-27 18:30:13

我希望执行此操作:

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

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

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

如何才能做到这一点?我对不包括lambda表达式调度的重构解决方案持开放态度。

感谢阅读

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

MessageBox在UI线程上运行,因此当它从模式显示返回时,您就在UI线程中。此时向UI调度器进行调度是没有意义的。

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

如果我正确理解你的问题,你会看到这样的东西。首先在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
                });
            }
        });