【问题标题】:COMException at RaiseCanExecuteChanged at UWPUWP 的 RaiseCanExecuteChanged 的​​ COMException
【发布时间】:2017-02-23 02:56:49
【问题描述】:

我有一个 RelayCommand,绑定到一个 AppBarButton,如下:

Command="{Binding NextCommand, UpdateSourceTrigger=PropertyChanged}"

命令的 CanExecute 属性只是一个简单的空检查。

private bool CanExecuteNextCommand() => !(this.SelectedItem == null);

但是,如果 RaiseCanExecuteChanged 被快速调用(通过触发器)多次,那么这里:

CanExecuteChanged?.Invoke(this, EventArgs.Empty); 

我得到以下异常:

“调用 COM 组件返回了错误 HRESULT E_FAIL。”

如果我从视图中删除 Command 属性绑定,它会起作用。

我什至尝试在触发器引发 CanExecuteChangeds 之前添加一个 Task.Delay(200),但我得到了同样的异常。

有没有人在 UWP 中遇到过这样的事情?

【问题讨论】:

  • 不确定问题是否出在您自己的代码中。触发器是什么?请与我们分享minimal reproducible example
  • 我看不出有任何理由将UpdateSourceTrigger=PropertyChanged 放在命令绑定上!通常,一个命令永远不会改变(但没有什么能阻止你在命令执行方法中拥有逻辑!)

标签: c# xaml uwp


【解决方案1】:

据此:https://social.msdn.microsoft.com/Forums/sqlserver/en-US/cfa7416c-435f-4f4b-9ad0-2b290b4ee978/w81-windows-81-app-working-properly-in-windows-81-throws-comexception-0x80004005-when-it-is?forum=wpdevelop

我遇到了同样的情况,即将调用 CanExecuteChanged 的​​命令与屏幕上的当前视图不在同一个视图上。

作为解决方案:我只是把 CanExecuteChanged?.Invoke(this, EventArgs.Empty);进入尝试,COMException 有一个空的 catch 块:

catch(System.Runtime.InteropServices.COMException ex) { }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-18
    • 2017-10-16
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 2011-10-22
    相关资源
    最近更新 更多