Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.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# 如何放置异步任务<;列表<&燃气轮机&燃气轮机;进入BindableCollection<&燃气轮机;_C#_Wpf - Fatal编程技术网

C# 如何放置异步任务<;列表<&燃气轮机&燃气轮机;进入BindableCollection<&燃气轮机;

C# 如何放置异步任务<;列表<&燃气轮机&燃气轮机;进入BindableCollection<&燃气轮机;,c#,wpf,C#,Wpf,如何等待任务并返回其结果,并将任务的结果放入BindableCollection。 (return await Task.Run())的语法有问题,无法将其放入BindableCollection。 基本上,我要做的是等待方法的结果,返回它并将其放入ViewModel中的BindableCollection中,然后绑定到ItemsControl。 我在多线程中查找了一些示例,不幸的是,没有一个线程包含任何关于BindableCollection的内容。 我只能猜测我必须以某种方式将泛型列表转换为

如何等待任务并返回其结果,并将任务的结果放入BindableCollection。 (return await Task.Run())的语法有问题,无法将其放入BindableCollection。 基本上,我要做的是等待方法的结果,返回它并将其放入ViewModel中的BindableCollection中,然后绑定到ItemsControl。 我在多线程中查找了一些示例,不幸的是,没有一个线程包含任何关于BindableCollection的内容。 我只能猜测我必须以某种方式将泛型列表转换为IEnumerable,尽管我不知道如何转换

public class DataAccess : Conductor<object>
{
    public async Task<List<DataModel>> Starter(IProgress<ProgressReportModel> progress, CancellationToken cancellationToken)
    {
        List<DataModel> output = new List<DataModel>();

        //What i tried so far
        return await ScannerAsync(progress, cancellationToken);
        List<GameDataModel>> output = await ScannerAsync(progress, cancellationToken);
    }

    private static async Task<List<DataModel>> ScannerAsync(IProgress<ProgressReportModel> progress, CancellationToken cs)
    {
         await Task.Run(() =>
        {
            Do Stuff

        }).ConfigureAwait(true);

         await Task.Run(() =>
        { 
            Do Stuff and return output.
        }).ConfigureAwait(true);
    }
}

public class ViewModel : Conductor<object>
{
   private BindableCollection<DataModel> Data { get; set; }
   private CancellationTokenSource cts = new CancellationTokenSource();
   private Progress<ProgressReportModel> progress = new Progress<ProgressReportModel>();

   public void StartScan()
   {
      DataAccess da = new DataAccess();
      Data = new BindableCollection<DataModel>(da.Starter(progress, cts.Token));
      // ERROR: Cannot Convert from Tasks.Task to Generic.IEnumerable
   }
}
公共类数据访问:导体
{
公共异步任务启动程序(IProgress progress,CancellationToken CancellationToken)
{
列表输出=新列表();
//到目前为止我试过什么
返回等待扫描同步(进度、取消令牌);
列表>输出=等待扫描同步(进度、取消令牌);
}
专用静态异步任务扫描同步(IProgress progress,CancellationToken cs)
{
等待任务。运行(()=>
{
做事
}).配置等待(true);
等待任务。运行(()=>
{ 
完成任务并返回输出。
}).配置等待(true);
}
}
公共类视图模型:导体
{
私有BindableCollection数据{get;set;}
私有CancellationTokenSource cts=新的CancellationTokenSource();
私有进度=新进度();
公共无效StartScan()
{
DataAccess da=新的DataAccess();
数据=新的BindableCollection(da.Starter(progress,cts.Token));
//错误:无法从Tasks.Task转换为Generic.IEnumerable
}
}

您的代码试图将任务转换为BindableCollection,您可能希望将任务的结果转换为BindableCollection,为此,您需要等待da。开始调用:

Data = new BindableCollection<DataModel>(await da.Starter(progress, cts.Token));

您的代码尝试将任务转换为BindableCollection,您可能希望转换任务的结果,为此,您需要等待da.Start方法:Data=new BindableCollection(wait da.Starter(progress,cts.Token));您可能需要将StartScan方法的签名调整为公开异步任务StartScanThanks!我设法做到了。我不知道我已经接近正确答案了。只需额外连接InotifyProperty更改,瞧,太棒了!如果我把它放在那里,你介意接受这个评论作为回答吗?结束这个问题?是的,当然,我在找那个tbh
public async Task StartScan()