Welcome 文本应用程序的目的是生成一个指向 WelcomeText 站点的 Web 链接并将该链接发送给新客户。在网站上,客户应该受到欢迎消息的欢迎,但欢迎页面从未显示,而是立即转到错误页面
开发模式切换到开发环境会显示有关发生的错误的详细信息
应用程序正在从 Visual Studio 发布到 IIS Web 服务器。我运行时收到的最后 2 个错误日志是:
ISAPI 向其工作进程报告了不健康状况。因此,为应用程序池“WelcomeText”提供服务的进程 ID 为“924”的工作进程已请求回收。
和
日志名称:应用程序
来源:.NET 运行时
日期:2024年11月5日下午3:27:33
活动ID:1000
任务类别:无
级别:错误
关键词:经典
用户:不适用
计算机:BLAZOR.hometowne.local
描述:
类别: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware
事件ID:1
跨度 ID:23bb04c94decbf4d
TraceId:a03b83ddef80d2323a257ad2617d08b3
父 ID: 0000000000000000
请求ID:40008782-0006-be00-b63f-84710c7967bb
请求路径:/welcome/feeeef
操作 ID:6b03fe1e-b4a6-4b60-8b05-a45167a2a608
动作名称:/_Host执行请求时发生未处理的异常。
异常:System.InvalidOperationException:当前线程未与Dispatcher关联。当触发渲染或组件状态时,使用 InvokeAsync() 将执行切换到 Dispatcher。
在 Microsoft.AspNetCore.Components.ComponentBase.StateHasChanged()
在 \WelcomeText\Shared\Piinegrow.razor 中的 WelcomeText.Shared.Piinegrow.UpdateProgressBar(MessageArgs args) 处:第 67 行
在 BlazorComponentBus.ComponentBus.<>c__DisplayClass12_1`1.b__2()
在System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(线程threadPoolThread,ExecutionContext执行上下文,ContextCallback回调,对象状态)
--- 先前位置的堆栈跟踪结束 ---
在System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(线程threadPoolThread,ExecutionContext执行上下文,ContextCallback回调,对象状态)
在System.Threading.Tasks.Task.ExecuteWithThreadLocal(任务&currentTaskSlot,线程threadPoolThread)
--- 先前位置的堆栈跟踪结束 ---
在 BlazorComponentBus.ComponentBus.Publish[T](T 消息,CancellationToken ct)
在 C:\Users\jkligel\source 中的 WelcomeText.Pages.WelcomePage.OnInitializedAsync() 处 epos\hometowne001\HTCApps\WelcomeText\Pages\WelcomePage.razor:第 67 行
在 Microsoft.AspNetCore.Components.ComponentBase.RunInitAndSetParametersAsync()
在 Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(任务 taskToHandle,ComponentState owningComponentState)
在...
我尝试注释掉这行代码:
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
我还尝试将
ASPNETCORE_ENVIRONMENT
值从“开发”更改为“生产”
所有解决方案均无效。
我的 web.config 说
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\WelcomeText.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
</environmentVariables>
</system.webServer>
</location>
</configuration>
<!--ProjectGuid: 4a5d8fb7-ed18-42d5-a130-e51889d7df34-->
异常:System.InvalidOperationException:当前线程不是 与调度程序相关联。使用 InvokeAsync() 切换执行 触发渲染或组件状态时发送给调度程序。
在 Microsoft.AspNetCore.Components.ComponentBase.StateHasChanged() 处 WelcomeText.Shared.Piinegrow.UpdateProgressBar(MessageArgs args) 中 \WelcomeText\Shared\Pinegrow.razor:第 67 行
对于此错误,您可以使用
await InvokeAsync(() => StateHasChanged());
或 InvokeAsync
来解决问题。
错误背后的原因是尝试从 Blazor 中的非 UI 线程更新 UI。