C# 在Blazor Webassembly中从wwwroot同步读取文件

C# 在Blazor Webassembly中从wwwroot同步读取文件,c#,blazor,blazor-webassembly,C#,Blazor,Blazor Webassembly,因此,我能够成功地异步读取文件,如。 我正在做一个简单的文字游戏(hangman),我正在读一些文本文件中的文字 在新游戏屏幕上,我让用户选择要猜测的单词长度,以及他们想要使用的单词集(例如普通单词、万圣节主题单词、圣诞节主题单词等) 问题是,当用户输入单词长度的数字时,我正在验证是否存在该长度的单词,如果没有,则我将数字设置为与用户输入的最接近的单词长度(例如,如果他们在字长字段中输入999,并且他们使用的是常规字词列表,则会将其设置为18,因为这是常规字词列表(电信)中最长的字词)。基本上,

因此,我能够成功地异步读取文件,如。
我正在做一个简单的文字游戏(hangman),我正在读一些文本文件中的文字 在新游戏屏幕上,我让用户选择要猜测的单词长度,以及他们想要使用的单词集(例如普通单词、万圣节主题单词、圣诞节主题单词等)

问题是,当用户输入单词长度的数字时,我正在验证是否存在该长度的单词,如果没有,则我将数字设置为与用户输入的最接近的单词长度(例如,如果他们在字长字段中输入999,并且他们使用的是常规字词列表,则会将其设置为18,因为这是常规字词列表(电信)中最长的字词)。基本上,当用户更改字词列表时,我需要正确阅读文件(至少以我目前的操作方式为准)因此,我可以正确验证用户是否/何时更改单词长度字段

我试过这样做:

public static string ReadFile(string localUrl) {
    return Http.GetStringAsync(localUrl).Result;
}
不幸的是Blazor不喜欢这样,当我尝试这样做时,它会抛出一个运行时异常

我当前正在将输入字段绑定到属性(如
)因为这似乎是一种简单的方法来验证它们,但属性不能是异步的。我有一个想法,我可以在我的单词列表组合框中使用
@onchange
来调用一个异步方法来更新单词列表,但这感觉更混乱,我觉得我可能用错了方法


我应该坚持使用
@onchange
调用异步方法来更新我的单词列表的解决方案,还是应该采取不同的做法?也许在开始时加载我的所有单词列表(只有几kb)?或者有更好的同步加载文件的方法吗?

但是属性不能是异步的
绑定会影响数据,它不会调用任何操作。设置局部变量或属性不需要是异步的,除非有可疑的事情发生,比如属性设置器调用方法,它不应该这样做。属性,特别是参数是状态。如果您想对状态更改做出响应,请使用EventCallback。这与Angular或ReactCallback没有什么不同。您不需要在SPA中同步阻止或执行任何内容。如果您认为需要这样做,则可能是做错了。网页是单线程的(除非您使用服务人员)因此,在等待任何操作时阻塞会冻结整个选项卡。这就是Javascript如此频繁地使用回调的原因-AJAX是异步的,
fetch
是异步的。
当用户更改单词列表时,我需要正确读取文件
一种更好、可能更简单的方法是在初始化时加载数据并存储它在内存或本地存储中。如果可以在本地保存,为什么要尝试从服务器读取内容?@PanagiotisKanavos我正在本地存储文件,我将在启动时尝试加载数据