【问题标题】:Can't Update ObjectListView On Main Form From Class无法从类更新主窗体上的 ObjectListView
【发布时间】:2014-10-03 07:54:11
【问题描述】:

我希望有人可以帮助我解决我遇到的问题:

我有一个带有 ObjectListView 控件的主窗体。当我通过主窗体上的代码向控件添加对象时,一切正常,但是....

我有一个做一些处理的类。这个类启动一个线程池来处理传入的信息,一旦完成,我会尝试更新存储在主窗体上的 ObjectListView。

奇怪的是我完全没有错误,调试器可以正常运行,只是没有通过该类填充到控件上。

我不知道我做错了什么......

所以这没有给我任何东西:

Dim _activityItem As New ActivityItem
frmMain.lsvActivity.AddObject(_activityItem)

但它在 frmMain 上运行良好

更新 我已经关闭了 ThreadPooling,它仍然没有更新 ObjectListView 控件。

更新 2 为了让事情更清楚一点,我将解释一下应用程序的工作原理(简要):

  • 当我的主窗体加载时,我启动一个线程来监听传入的 消息
  • 从主窗体中对 ObjectListView 进行的任何填充都可以
  • 收到消息后,将其传递给 MessageHandling 类 解码
  • 解码后,传入线程池进行处理
  • 所有处理完成后,通过 ObjectListView 向用户提供状态,但仍在 MessageHandling 类中(使用上面解释的代码 sn-p)
  • 然后应用程序为每个传入的数据重复整个过程 消息或直到退出

谢谢

【问题讨论】:

    标签: vb.net winforms class objectlistview


    【解决方案1】:

    试试这个。

    frmMain.Invoke(Sub() frmMain.lsvActivity.AddObject(_activityItem))
    

    您不应直接从 UI 线程以外的任何线程访问 UI 控件。
    Control.Invoke 在 UI 线程上执行指定的委托。

    【讨论】:

    • 感谢您的评论。我的问题实际上包括两个不同的问题。 1. 我必须在尝试更新 ListView 的同一类上创建一个 frmMain 实例,以及 2. 我必须实现您的 Invoke 方法以防止跨线程调用。 ThreadPooling 很好,我可以重新打开它。感谢 Ripple 的帮助......并且喜欢这个名字! ;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    相关资源
    最近更新 更多