.net core 当前线程未与调度程序关联。触发渲染时,使用InvokeAsync()将执行切换到调度程序
我正在处理Dotnet Core Blazor,在删除事件后使用EventCallBack绑定父网格时出现以下错误。下面是使用子组件的代码.net core 当前线程未与调度程序关联。触发渲染时,使用InvokeAsync()将执行切换到调度程序,.net-core,async-await,blazor,blazor-server-side,configureawait,.net Core,Async Await,Blazor,Blazor Server Side,Configureawait,我正在处理Dotnet Core Blazor,在删除事件后使用EventCallBack绑定父网格时出现以下错误。下面是使用子组件的代码 <tbody> @foreach (var employee in Employees) { <BlazorAppDemo.Pages.Controls.EmployeeList Employee="employee"
<tbody>
@foreach (var employee in Employees)
{
<BlazorAppDemo.Pages.Controls.EmployeeList Employee="employee"
ShowFooter="ShowFooter"
OnEmployeeSelectionChange="onEmployeeSelectionChanged"
btnDeleteClick="OnEmployeeDeleted" >
</BlazorAppDemo.Pages.Controls.EmployeeList>
}
</tbody>
您应该删除
.ConfigureAwait(false)
(据我所知是2倍)
当您在Blazor中正确使用async/Wait时,您几乎不需要它
当您使用它时,您要求在不同的线程上运行事件的其余部分。在大多数情况下,错误的线程 谢谢你的回复。删除.ConfigureAwait(false)后,它现在开始工作。我进行了配置,因为在异步调用“考虑在等待的任务上调用ConfiguredAwait”时,到处都会收到警告。您可以发布该警告的文本或编号吗?因为这不应该发生。你能发布一个最小的回购协议来证明你的问题吗?我想做个实验,看看这是不是一个bug。等等,我想把我的回购协议上传到git上。一旦完成,我会让你知道的。
<tr>
@*<td>@Employee.EmployeeId</td>*@
<td><input type="checkbox" @onchange="CheckBoxChanged" /></td>
<td>@Employee.Department.DepartmentName</td>
<td>@Employee.FirstName</td>
<td>@Employee.DateOfBirth.ToShortDateString()</td>
<td><img class="card-img-top img-thumb" style="width:50px;height:50px" src="@Employee.PhotoPath" /></td>
@if (ShowFooter)
{
<AuthorizeView Roles="Admin" Policy="OldEmployeeBefore2020">
<Authorized>
<td>
<a href="@($"employeedetails/{Employee.EmployeeId}")" class="btn btn-primary m-1">View</a>
<a href="@($"employeeEdit/{Employee.EmployeeId}")" class="btn btn-primary m-1">Edit</a>
@*<a href="#" class="btn btn-danger m-1">Delete</a>*@
<button class="btn btn-danger m-1" @onclick="btnDelete_Click">
</button>
</td>
</Authorized>
</AuthorizeView>
}
[Parameter]
public EventCallback<int> btnDeleteClick { get; set; }
protected async Task btnDelete_Click()
{
var response = await EmployeeService.Delete(Employee.EmployeeId).ConfigureAwait(false);
if (string.IsNullOrEmpty(response.ErrorMessage))
{
await btnDeleteClick.InvokeAsync(Employee.EmployeeId);
//NavigationManager.NavigateTo("employee");
}
}
protected async Task OnEmployeeDeleted(int id)
{
var response = await EmployeeService.GetEmployees().ConfigureAwait(false);
if (response.Result != null)
{
Employees = response.Result.Result;
}
else
{
PageMessage = response.ErrorMessage;
}
}