这是一个简单的例子:
现在,每次我使用这个方法,我都需要拦截CookinDone事件并继续执行。
如果我像这样放置
可能在不同的环境中也会有所不同,比如一些方法适用于WPF应用程序,一些则适用于其他应用程序等等,但应该有一个通用模式,不是吗?
你们怎么做到的呢?
public event EventHandler CookinDone = delegate{};
public void CoockinRequest(){
var indicator = new ActivityIndicator();
ActivityIndicator.Show("Oooo coockin' something cool");
var bw = new BackgroundWorker();
bw.DoWork += (sender, e) => CockinService.Cook();
bw.RunWorkerCompleted += (sender, e) => {
indicator.Hide();
CookinDone.Invoke(this,null);
};
bw.RunWorkerAsync();
}
现在,每次我使用这个方法,我都需要拦截CookinDone事件并继续执行。
var cook = new Cook();
cook.CookinDone += (sender, e) => MessageBox.Show("Yay, smells good");
cook.CoockinRequest();
如何通过将方法的返回类型设置为布尔型,并在Cookin完成时返回结果来简化此操作?
if (CoockinRequest()) MessageBox.Show('Yay, smells even better');
如果我像这样放置
while (bw.IsBusy)
,它会破坏我的ActivityIndicator,冻结主线程,而且我觉得这是最糟糕的事情。还有一些Monitor.Wait
的东西以及一些其他复杂的东西,但所有这些都似乎过于复杂,在简单场景中使用起来不太容易。可能在不同的环境中也会有所不同,比如一些方法适用于WPF应用程序,一些则适用于其他应用程序等等,但应该有一个通用模式,不是吗?
你们怎么做到的呢?