查看以下编辑问题
我有以下问题。
我收到来自组件的通知事件我无法更改电话:
Subject.Save();
我的代码有一个事件处理程序来捕获在组件中触发的通知事件。 事件处理程序已正确注册。
我收到的通知带有事件来源和SomeEventArgs
args。
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()
,而是立即为所有主题调用myEventHandler
。所以,如果我有10个主题,我想首先接收10个路径,然后全部显示它们
由ShowDisplay()打开的单个表单中的10个。因此,无法从List<string> productNames = GetProductNamesAsync();
调用ShowDisplay,因为该事件仅处理单个主题的通知。
我想有一个全局列表,并用每个通知的路径填充它,但是引入了全局变量,而且我不知道列表何时填满了所有10个路径。它似乎不是一个优雅的想法。
已编辑的问题 我正在调用异步方法来获取像
这样的产品的名称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>
转换为var string = `As all string substitutions in Template Strings are JavaScript
expressions, we can substitute a lot more than variable names.
For example, below we can use expression interpolation to
embed for some readable inline math:`
console.log(string);
答案 0 :(得分:0)
List<string> productNames = await GetProductNamesAsync();
需要List<string> productNames = await Task.Run(() => GetProductNames());
,但是你真的不应该为同步函数创建异步包装器。做{{1}}