Blazor WASM块任务,直到用户输入

时间:2020-06-06 17:09:56

标签: multithreading modal-dialog blazor webassembly

我需要使用以下方法签名来实现类接口:

 bool GetChoice<T>(string title, string body, out T chosen, params T[] options);

在控制台或桌面应用中,我会这样做:

 return Parse(Console.ReadLine());

 var dlg = new MyDialogueBox(options);
 dlg.ShowDialog();
 return dlg.Result;

我有一个文本框,用户可以在其中输入命令,所以我认为阻止并等待用户将选择项输入到文本框中非常简单(或者抛出一些按钮并阻止直到按下一个按钮)

我的方法当前如下:

while(true)
{
    Task.Delay(10);
    // Check textbox for choice being entered

    // return choice if one has been made

    // I had hoped this call would pump the UI thread but it doesn't
    StateHasChanged();
}

我知道Blazor还不支持线程(并且WASM线程通常是一个非常新的功能)。但是有很多关于任务和产生线程(回到UI?)的讨论。但是,一旦我触发该方法,整个UI就会阻塞。

我已经看到了有关此问题的其他线程(Task.Delay),但是除了分解一个长期运行的任务以外,没有其他解决方案-在这里我不能做,因为我想要的是阻塞直到一个条件。

我通过按下按钮来启动运行过程:

  Task round = new Task(()=>
      {
        // This will trigger 0 or more calls to GetChoice
        world.RunRound(ui,a);

        StateHasChanged();
      });

      round.Start();

在Blazor中有什么方法可以使这项工作完成?还是我必须等到它们实现线程?

0 个答案:

没有答案