我有一些问题:
我是cefSharp
的网络浏览器,我试图在加载时触发命令:
我的命令目前为空:
LoadedCommand = new RelayCommand(() =>
{
});
问题是,当事件被触发时,在进入我的命令之前,我得到一个关于跨线程异常的InvalidOperationException
。
对于我看到的here,似乎这个事件是从一个不是UI线程的线程触发的。
我感觉EventToCommand
类试图获取导致应用程序崩溃的UI内容。
您如何解决此问题?
答案 0 :(得分:1)
您可以使用Behaviour
。
public class ChromiumLoadedBehaviour : System.Windows.Interactivity.Behavior<CefSharp.Wpf.ChromiumWebBrowser>
{
public ICommand Command
{
get { return (ICommand)GetValue(CommandProperty); }
set { SetValue(CommandProperty, value); }
}
// Using a DependencyProperty as the backing store for Command. This enables animation, styling, binding, etc...
public static readonly DependencyProperty CommandProperty =
DependencyProperty.Register("Command", typeof(ICommand), typeof(ChromiumLoadedBehaviour), new PropertyMetadata(null));
protected override void OnAttached()
{
base.OnAttached();
this.AssociatedObject.Loaded += AssociatedObject_Loaded;
}
protected override void OnDetaching()
{
base.OnDetaching();
this.AssociatedObject.Loaded -= AssociatedObject_Loaded;
}
private void AssociatedObject_Loaded(object sender, RoutedEventArgs e)
{
Command?.Execute(null);
}
}
如果您不知道 - 如何使用Behaviour
- 请查看此答案here
其他信息
也许使用FrameLoadEnd
事件。