查阅EDITED问题下方C#获取异步列表错误
我有以下问题。
我收到通知事件从组件我不能改变的呼叫:
Subject.Save();
我的代码有一个事件处理程序来捕获在组件触发的通知事件。 事件处理程序已正确注册。
我收到的通知携带了事件源和SomeEventArgs
参数。
SomeEventArgs
向我提供包含我需要的ID的数据。像
private void myEventHandler(object source, SomeEventArgs e)
{
string path = e.getData().getPath();
...
...
ShowDisplay(); //display shows a form with the path in a grid
}
的东西时,我救一个主题,我有一个通知,并从其SomeEventArgs
我可以得到 路径,我需要。所以这很好。
问题是当我想保存多个主题。对于每个主题的Save(),myEventHandler
最终将被解雇,并且我将获得如上所述的路径。
问题是我不想为每个单独的主题调用ShowDisplay()
,而是一次调用所有主题。所以,如果我有10个主题,我想首先接收10个路径,然后在由ShowDisplay()打开的单个窗体中显示它们全部的所有 10。因此,ShowDisplay不能从myEventHandler
中调用,因为该事件仅处理单个主题的通知。
我认为有一个全局列表,并填充每个通知的路径,但引入了全局变量,加上我不知道列表中是否填满了所有10个路径。这似乎不是一个优雅的想法。
EDITED问题 我打电话异步方法获得的产品的名称,如
List<string> productNames = GetProductNamesAsync();
我的异步方法是这样的:
public async Task<List<string>> GetProductNamesAsync()
{
return await Task.Run(() => subject.GetList());
}
这将返回错误 不能隐含转换型System.Threading.Tasks.Task<System.Collections.Generic.List<string>>
到System.Collections.Generic.List<string>
该库中的某个类型的某个实例将触发该事件。您需要为该实例注册一个事件处理程序。从你的问题来看,你不清楚你将如何掌握这一实例。 – Will
它在'Save()'上触发的'event'的名称是什么?假设它是'Saved',你需要做'myObject.Saved + = handler_name_here'。事件处理程序的签名在这里是不可能提及的,除非已知事件详细信息。 – niksofteng
我更新了我的帖子。谢谢 – cd491415