Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#获取异步列表错误_C#_Asynchronous_Async Await_Task - Fatal编程技术网

C#获取异步列表错误

C#获取异步列表错误,c#,asynchronous,async-await,task,C#,Asynchronous,Async Await,Task,见下面编辑的问题 我有以下问题 我收到来自组件的通知事件我无法更改调用: Subject.Save(); 我的代码有一个事件处理程序来捕获组件中触发的通知事件。 事件处理程序已正确注册 我收到的通知包含事件源和SomeEventArgsargs SomeEventArgs为我提供包含所需ID的数据。差不多 private void myEventHandler(object source, SomeEventArgs e) { string path = e.getData().getP

见下面编辑的问题

我有以下问题

我收到来自组件的通知事件我无法更改调用:

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()
,而是同时为所有主题调用。所以,如果我有10个主题,我想先收到10条路径,然后全部显示出来 10以ShowDisplay()打开的单一形式显示。因此,不能从myEventHandler调用ShowDisplay,因为该事件只处理单个主题的通知

我想有一个全局列表,并用每个通知中的路径填充它,但这引入了全局变量,而且我不知道列表何时填充了所有10条路径。这似乎不是一个优雅的想法

编辑的问题 我调用一个异步方法来获取产品名称,如

List<string> productNames = GetProductNamesAsync();
List productNames=GetProductNamesAsync();
我的异步方法如下所示:

public async Task<List<string>> GetProductNamesAsync()
{
  return await Task.Run(() => subject.GetList());
}
公共异步任务GetProductNamesAsync() { 返回等待任务。运行(()=>subject.GetList()); } 这将返回错误
无法将类型
System.Threading.Tasks.Task
隐式转换为
System.Collections.Generic.List
List-productNames=GetProductNamesSync()需要是
列表productNames=await GetProductNamesAsync()List products=wait任务要好得多。运行(()=>GetProductNames())

该库中某个类型的实例将触发该事件。您需要向该实例注册一个事件处理程序。您的问题不清楚您将如何获得该实例。它在
Save()
上触发的
事件的名称是什么?假设它是
保存的
,您需要在这里执行
myObject.Saved+=handler\u name\u
。除非知道事件的详细信息,否则事件处理程序的签名不可能在这里提及。我更新了我的帖子。谢谢你需要更新更多的代码。。
myObject
在哪里声明/初始化如果您对事件的了解有限,那么当您应该查找
C#MSDN events
进行一些解释和示例阅读时,为什么还要在这里浪费时间..在研究bit之后,我找到了其他方法来做我需要做的事情,但我遇到了另一个问题。我修改了我的问题,以反映我现在面临的问题。感谢所有回应的人。