首页 > 解决方案 > 如何让两个轮询运行 WPF?

问题描述

private async void InitialiseApp(object sender, RoutedEventArgs e)
{
    // The first two function run once
    await InitManifest();
    await InitResult();

    await UpdateManifest(_ManifestToken.Token);
    await UpdateResult(_ResultToken.Token);
}

public async static Task UpdateManifest(CancellationToken token)
{
    while (true)
    {
       await Task.Delay(45000);
    }
}   

我的情况是我有两种类型的 json 数据。

第一个 json(有多个链接(对象)): {"name":"Link 1","id":22,"url":"link1.json"}

第二个json(有多个人对象):{“name”:“john”,“age”:22,“class”:“mca”}

第一个 json 包含包含第二种类型 json 数据的链接。

我想将所有链接的名称放在 a 中Listbox,并且我有第二个“列表框”,它显示第一个“列表框”中所选项目的数据。

我最大的挑战是两个 json 更新第一个将每 45 秒轮询一次,第二个 ¬Listbox¬ 轮询非常 15 秒。

我创建了一个函数,它可以Listbox成功地异步初始化两个 的数据。但现在我想独立更新两个“列表框”,而不阻塞 UI 线程。我确实调用了两次民意调查,但我设置了一个断点,并且我意识到代码没有进入第二次民意调查。我明白为什么,但我不确定如何解决这个问题。

标签: c#wpf

解决方案


好吧,你await的任务。这意味着您等待他们完成。而且您不想等待他们完成,因为他们从不这样做,所以不要等待他们。删除await那些你不想等待的任务前面的关键字。

您可能希望也可能不希望将结果任务作为变量,您可以通过将方法的结果分配给Task.

您当前的问题将通过await从您不想等待的那些行中删除关键字来解决。其他问题将随之而来,这在 UI 中的多线程中很常见。


推荐阅读