【发布时间】:2013-10-17 00:06:23
【问题描述】:
假设在某个时候至少有 10 个方法在堆栈中可用,但尚未完成。其中许多方法都在处理对 UI 产生影响的操作。此时,我想发出一个保存命令。保存命令可以成功完成,也可以失败。根据结果,我想做不同的操作,然后才返回执行到那些留在堆栈上的方法。
现在,如果我同步运行保存命令,没有问题。我想异步执行Save命令,将执行返回到消息泵(UI),而堆栈上的所有代码(方法)都应该等待SaveCommand完成。
现在,据我了解等待,不能保证会在同一个线程(在我的情况下为 UI 线程)上进行调用。所以,我不能只等待被调用的第一个方法(堆栈中所有其他方法的父方法),因为如果启动不同的线程,它将引发 UI 异常(从不同的线程访问 UI 元素)。
那么,如何处理这种情况呢?示例代码:
public bool PropertyName {get; set { MethodA(); // some code after };}
public void MethodB() { MethodC(); // some code after }
public void MethodC() { MethodD(); // some code after }
public void MethodD() { MethodE(); // some code after }
// etc
void MEthodK()
{
Save();
}
【问题讨论】:
-
你应该告诉我们你正在使用什么语言/框架/等
-
我已经更新了这个问题。这些方法不一定是方法,它们可以是函数,只是为了清楚起见是无效的。
标签: c# wpf c#-4.0 async-await