gpt4 book ai didi

c# - 通过家长抚养事件更新 child 的 View 模型

转载 作者:行者123 更新时间:2023-12-03 10:28:45 25 4
gpt4 key购买 nike

涉及的类(class):

  • 经典MVVM作为 child 控件的容器。
  • 带有自己的 View 模型的 child 控件(需特定按钮)。
  • BackgroundWorker通过套接字轮询远程主机。

  • 行为:
  • 主应用程序开始从XML列表中加载子控件。
    每个 child 都有父 View 中的更新事件处理程序
    更新主屏幕属性的模型(我们称为主 View 模型)
    child 。
  • 主ViewModel启动BackgroundWorker
  • BackgroundWorker调用Socket方法,并将ViewModel回调用于响应。
  • 回调将更新Main ViewModel属性。

  • 从这里开始,它可以完美运行,但是:
  • Updated属性在集合中引发一个事件,Children处理程序以其自身的属性更新开始。
  • 更新时会引发异常:

  • The calling thread cannot access this object because a different thread owns it.



    几秒钟后,按钮将更新。我猜是因为UI线程再次获取控件并更新控件。但是,有没有更好的方法来解决这个问题?

    最佳答案

    要扩展Uebercoder的答案,您可能不需要关心 View 模型中的控件,但是仍然需要将后台更新编码到主线程上。

    因此,无论是在后台工作人员中,还是更有可能在主 View 模型中,您都需要执行以下操作:

    Application.Current.Dispatcher.BeginInvoke((Action)(() => { /* update properties */ } )));

    关于c# - 通过家长抚养事件更新 child 的 View 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20348205/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com