【发布时间】:2015-08-19 16:33:36
【问题描述】:
我在调用异步方法时遇到了一些麻烦。该方法在一个类中并加载一个文本文件。我想在应用程序启动时加载文本文件。但是,我不能从构造函数调用异步方法。我在网上看到的大多数示例都经常调用异步按钮按下事件中的方法。
目前,我正在从我的构造函数中尝试这个:
Task.Run(async () =>
{
this.categories = await GenerateCategories(numberOfCategories);
});
虽然这可行,但程序的其余部分在调用此方法后继续执行,并且执行使用“类别”的代码导致崩溃(因为类别仍然为空,因为任务尚未完成)。
总而言之,从哪里以及如何最好地调用此方法?我不希望它在用户按下按钮或任何东西时加载,我希望在执行更多代码之前填充“类别”。
我正在使用 C# 并编写一个通用应用程序,因此加载文件必须是异步的。
【问题讨论】:
-
不确定通用应用程序,但 winforms,我相信 WPF 有表单的加载事件,这不会在这里工作吗?
-
所以我认为你需要稍微改变一下你的流程。您应该继续异步运行此任务(即脱离 UI 线程)。但是,您需要应用程序中的其他进程跟随这个进程,而不是在此任务执行时同时发生。需要更多地了解您的应用才能提出解决方案。
-
您可以创建一个异步工厂方法来返回您的类的实例。您的构造函数可以是同步的,然后加载此数据。或者在类中添加一个异步方法来加载数据发布构造函数,并使用工厂方法在一个步骤中为您完成这一切。
-
如果您在 UI 线程上运行的其他方法取决于
categories字段的存在,那么您需要在 UI 上同步运行该GenerateCategories线程也。但是您应该改为在GenerateCategories之后异步运行其他方法。
标签: c# file-io windows-runtime async-await win-universal-app