C# 完成所有UI任务后执行任务

C# 完成所有UI任务后执行任务,c#,wpf,dispatcher,C#,Wpf,Dispatcher,正如标题中所写,我试图编写一段在所有UI任务之后执行的代码。我曾尝试使用调度程序,但没有成功,最后使用了后台工作人员和线程。Sleep(1000),这对我来说很危险 代码片段-使用BackgroundWorker: BackgroundWorker bw2 = new BackgroundWorker(); bw2.DoWork += (o, e) => Thread.Sleep(1000); bw2.RunWorkerCompleted += (o, e) => MyMethod(

正如标题中所写,我试图编写一段在所有UI任务之后执行的代码。我曾尝试使用
调度程序
,但没有成功,最后使用了
后台工作人员
线程。Sleep(1000)
,这对我来说很危险

代码片段-使用BackgroundWorker:

BackgroundWorker bw2 = new BackgroundWorker();
bw2.DoWork += (o, e) => Thread.Sleep(1000);
bw2.RunWorkerCompleted += (o, e) => MyMethod();
bw2.RunWorkerAsync();
Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, new Action(() => MyMethod()));
代码片段-使用Dispatcher(我希望它执行时不会执行):

BackgroundWorker bw2 = new BackgroundWorker();
bw2.DoWork += (o, e) => Thread.Sleep(1000);
bw2.RunWorkerCompleted += (o, e) => MyMethod();
bw2.RunWorkerAsync();
Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, new Action(() => MyMethod()));

我还尝试使用了
DispatcherPriority.Background

您能提供更多详细信息吗?为什么不在你想要的时候执行呢?您希望它什么时候执行?您可以使用Task.Delay或计时器来引入延迟,而不是使用BackgroundWorker(阻止线程)。然后尝试更高的
DispatcherPriority
。它将被执行。@Andrew我不知道它没有在我想要的时候执行,这是在队列中所有当前任务之后。我不想使用计时器,因为这对我来说很危险。有没有办法将任务放在调度程序队列的末尾?它将始终添加到队列的末尾(考虑优先级)。。。但是,如果您的任务(看起来是异步的)在您完成后将其工作添加到队列中,该怎么办?你需要知道他们什么时候完成。然而,这都是猜测——你需要提供一个例子。好吧,除非你提供一个例子来说明这个问题,否则我们无能为力。它不一定是真正的代码,只是一些类似的东西(阅读链接)。您当前的代码似乎只在以下事实的巧合下工作:延迟时间比第三方方法完成所需的时间长。那不是我可以信赖的。你能提供更多的细节吗?为什么不在你想要的时候执行呢?您希望它什么时候执行?您可以使用Task.Delay或计时器来引入延迟,而不是使用BackgroundWorker(阻止线程)。然后尝试更高的
DispatcherPriority
。它将被执行。@Andrew我不知道它没有在我想要的时候执行,这是在队列中所有当前任务之后。我不想使用计时器,因为这对我来说很危险。有没有办法将任务放在调度程序队列的末尾?它将始终添加到队列的末尾(考虑优先级)。。。但是,如果您的任务(看起来是异步的)在您完成后将其工作添加到队列中,该怎么办?你需要知道他们什么时候完成。然而,这都是猜测——你需要提供一个例子。好吧,除非你提供一个例子来说明这个问题,否则我们无能为力。它不一定是真正的代码,只是一些类似的东西(阅读链接)。您当前的代码似乎只在以下事实的巧合下工作:延迟时间比第三方方法完成所需的时间长。那不是我可以信赖的。