【发布时间】:2018-02-28 00:31:49
【问题描述】:
我创建了一个名为Instance 的方法,它允许我拥有Settings 窗口的单个实例,如下所示:
public static async Task<Settings> Instance()
{
if (AppWindow == null)
{
AppWindow = new Settings();
AppWindow.Closing += async (x, y) =>
{
bool close = await AppWindow.CheckSettings();
y.cancel = (close) ? true : false;
AppWindow = null;
};
}
return AppWindow;
}
CheckSettings 具有以下结构:
private async Task<bool> CheckSettings()
{
//just as example
return true;
}
Instance()方法告诉我里面没有await操作符。为什么会这样?
我还需要问其他问题:
- 这个逻辑可以在属性中使用而不是
Instance方法吗?怎么样? - 可以在不实现
Task<bool>的情况下关闭窗口
更新
基于这个伟大社区的有用答案和 cmets,我编辑了这个方法(现在是一个属性):
public static Settings Instance
{
get
{
if (AppWindow == null)
{
AppWindow = new Settings();
AppWindow.Closing += async (x, y) =>
{
bool close = await AppWindow.CheckSettings();
y.Cancel = close;
//AppWindow.Close();
//AppWindow = null;
};
}
return AppWindow;
}
}
问题是Cancel 没有等待 CheckSettings()
【问题讨论】:
-
你没有做任何事情
async那为什么要异步呢? -
@nvoigt 我需要异步,因为在 CheckSettings 中我有一些 Mahapp 框架的方法,例如 await ShowMessageAsync()
-
Instance() 方法内部没有异步调用,此外,afaik 异步 EventHandler 对 CancelEventHandler 是不可行的,因为事件将在您的 Handler 完成之前被调用并继续,因此设置 Cancel属性不会做太多。
-
@nvoigt 检查更新