Cefsharp InvokeOnUiThreadIfRequired
Cefsharp InvokeOnUiThreadIfRequired
我将 chromium 从 75.x.x 更新为 85.x.x(最新),令我惊讶的是它给 InvokeOnUiThreadIfRequired()
带来了错误
我的代码:
private void Chrm_TitleChanged(object sender, TitleChangedEventArgs e)
{
this.InvokeOnUiThreadIfRequired(() => tabControl.SelectedTab.Text = e.title);
}
private void Chrm_AddressChanged(object sender, AddressChangedEventArgs e)
{
this.InvokeOnUiThreadIfRequired(() =>
{
url.Text = e.Address;
});
}
错误消息:'MyForm' 不包含 'InvokeOnUiThreadIfRequired' 的定义,并且无法找到接受类型 'MyForm' 的第一个参数的可访问扩展方法 'InvokeOnUiThreadIfRequired'(是您缺少 using 指令或程序集引用?)
关于如何更改该代码以使其正常工作的任何建议?
在GitHub上搜索CefSharp问题只用了5分钟,找出原因:https://github.com/cefsharp/CefSharp/issues/2983
您可以通过将以下 class 添加到您的项目来解决这个问题,该项目是从 https://github.com/cefsharp/CefSharp/blob/cefsharp/75/CefSharp.WinForms/Internals/ControlExtensions.cs#L20 复制的:
public static class MyControlExtensions
{
public static void InvokeOnUiThreadIfRequired(this Control control, Action action)
{
if (control.InvokeRequired)
{
control.BeginInvoke(action);
}
else
{
action.Invoke();
}
}
}
但是,更大的问题是您以错误的方式调用了此方法。您应该使用控件正在修改:
tabControl.InvokeOnUiThreadIfRequired(() => tabControl.SelectedTab.Text = e.title);
url.InvokeOnUiThreadIfRequired(() => url.Text = e.Address);
我将 chromium 从 75.x.x 更新为 85.x.x(最新),令我惊讶的是它给 InvokeOnUiThreadIfRequired()
我的代码:
private void Chrm_TitleChanged(object sender, TitleChangedEventArgs e)
{
this.InvokeOnUiThreadIfRequired(() => tabControl.SelectedTab.Text = e.title);
}
private void Chrm_AddressChanged(object sender, AddressChangedEventArgs e)
{
this.InvokeOnUiThreadIfRequired(() =>
{
url.Text = e.Address;
});
}
错误消息:'MyForm' 不包含 'InvokeOnUiThreadIfRequired' 的定义,并且无法找到接受类型 'MyForm' 的第一个参数的可访问扩展方法 'InvokeOnUiThreadIfRequired'(是您缺少 using 指令或程序集引用?)
关于如何更改该代码以使其正常工作的任何建议?
在GitHub上搜索CefSharp问题只用了5分钟,找出原因:https://github.com/cefsharp/CefSharp/issues/2983
您可以通过将以下 class 添加到您的项目来解决这个问题,该项目是从 https://github.com/cefsharp/CefSharp/blob/cefsharp/75/CefSharp.WinForms/Internals/ControlExtensions.cs#L20 复制的:
public static class MyControlExtensions
{
public static void InvokeOnUiThreadIfRequired(this Control control, Action action)
{
if (control.InvokeRequired)
{
control.BeginInvoke(action);
}
else
{
action.Invoke();
}
}
}
但是,更大的问题是您以错误的方式调用了此方法。您应该使用控件正在修改:
tabControl.InvokeOnUiThreadIfRequired(() => tabControl.SelectedTab.Text = e.title);
url.InvokeOnUiThreadIfRequired(() => url.Text = e.Address);