我已经用AvaloniaUI创建了我的浏览器应用程序,它有下面的代码,来自App.axaml.cs:
using (var client = new HttpClient())
{
var task = Task.Run(() => client.GetStringAsync(_apiBaseUrl));
task.Wait();
var content = task.Result;
return Deserialize<TState?>(content) ?? new();
}
字符串
这段代码抛出PlatformNotSupportedException,当我运行浏览器版本的应用程序时:
Uncaught ManagedError:发生了一个或多个错误。(无法在此运行时上等待监视器。)
当我尝试使用.GetAwaiter().GetResult()
而不是Task.Run()
时,也会出现相同的错误
有人知道如何从浏览器应用程序发出http请求吗?
这将是很好的有能力重用相同的代码浏览器和桌面版本。
更新:
我尝试使用同步版本,因为方法public override void OnFrameworkInitializationCompleted()
有void返回类型,异常处理将是一个麻烦,因为我知道。
1条答案
按热度按时间mec1mxoz1#
浏览器上的.NET(通常大部分)不支持多线程。.NET 8只在最新的浏览器版本上提供了一些多线程支持,但它仍然是有限的。
你不能以任何方式阻塞主线程。“
有人知道如何从浏览器应用程序发出http请求吗?
使用异步方法而不阻塞。
字符串