在触发渲染或组件状态时使用 InvokeAsync() 将执行切换到 Dispatcher
Use InvokeAsync() to switch execution to the Dispatcher when triggering rendering or component state
我在 Blazor Server 中有一个子组件,它显示 table。单击 table 中的一行,我有以下处理程序方法和事件回调将数据发送到父组件(它将子组件包装在需要在新数据通过时切换的弹出窗口中) .
object
get/set 来自 DevExpress,我似乎无法在不抛出错误的情况下使该方法异步,但事件回调需要异步。
[Parameter]
public EventCallback<DataObj> OnDataObjSelection { get; set; }
DataObj _selectedDataObject { get; set; }
object SelectedDataObject
{
get
{
return _selectedDataObject;
}
set
{
_selectedDataObject = value as DataObj;
new Task(async () =>
{
await OnDataObjSelection.InvokeAsync(_selectedDataObject);
}).Start();
}
}
在父组件中,我在事件回调中触发了这个函数(如果子组件可见,它将隐藏包装子组件的弹出窗口):
async void DataObjSelectionChanged(DataObj dataObj)
{
_currentDataObj = dataObj;
if (_showPopup)
{
await InvokeAsync(() =>
{
_showPopup = false;
StateHasChanged();
});
}
}
然而,我收到以下错误:Use InvokeAsync() to switch execution to the Dispatcher when triggering rendering or component state Blazor Server
有人知道如何解决这个问题吗?我以为我的语法是正确的,但显然不是。
正如上面提到的,你把它复杂化了。
[Parameter]
public EventCallback<DataObj> OnDataObjSelection { get; set; }
DataObj _selectedDataObject { get; set; }
object SelectedDataObject
{
get => _selectedDataObject;
set
{
_selectedDataObject = value as DataObj;
OnDataObjSelection.InvokeAsync(_selectedDataObject);
}
}
并且:
private void DataObjSelectionChanged(DataObj dataObj)
{
_currentDataObj = dataObj;
if (_showPopup)
StateHasChanged();
}
我在 Blazor Server 中有一个子组件,它显示 table。单击 table 中的一行,我有以下处理程序方法和事件回调将数据发送到父组件(它将子组件包装在需要在新数据通过时切换的弹出窗口中) .
object
get/set 来自 DevExpress,我似乎无法在不抛出错误的情况下使该方法异步,但事件回调需要异步。
[Parameter]
public EventCallback<DataObj> OnDataObjSelection { get; set; }
DataObj _selectedDataObject { get; set; }
object SelectedDataObject
{
get
{
return _selectedDataObject;
}
set
{
_selectedDataObject = value as DataObj;
new Task(async () =>
{
await OnDataObjSelection.InvokeAsync(_selectedDataObject);
}).Start();
}
}
在父组件中,我在事件回调中触发了这个函数(如果子组件可见,它将隐藏包装子组件的弹出窗口):
async void DataObjSelectionChanged(DataObj dataObj)
{
_currentDataObj = dataObj;
if (_showPopup)
{
await InvokeAsync(() =>
{
_showPopup = false;
StateHasChanged();
});
}
}
然而,我收到以下错误:Use InvokeAsync() to switch execution to the Dispatcher when triggering rendering or component state Blazor Server
有人知道如何解决这个问题吗?我以为我的语法是正确的,但显然不是。
正如上面提到的,你把它复杂化了。
[Parameter]
public EventCallback<DataObj> OnDataObjSelection { get; set; }
DataObj _selectedDataObject { get; set; }
object SelectedDataObject
{
get => _selectedDataObject;
set
{
_selectedDataObject = value as DataObj;
OnDataObjSelection.InvokeAsync(_selectedDataObject);
}
}
并且:
private void DataObjSelectionChanged(DataObj dataObj)
{
_currentDataObj = dataObj;
if (_showPopup)
StateHasChanged();
}