我需要使用以下方法签名来实现类接口:
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中有什么方法可以使这项工作完成?还是我必须等到它们实现线程?