【问题标题】:Synchronized deletion in TListView? [closed]TListView中的同步删除? [关闭]
【发布时间】:2012-05-30 21:04:56
【问题描述】:

我有一个包含很多项目的列表视图。 我想删除一些同步的项目。 那可能吗? 我有大约 100 个线程同时访问 ListView 以删除其中的项目。

例如:

 procedure Thread1 ; stdcall;
 var
  item : TlistItem;
 begin
  //...
  item.delete;
  //...
 end;

 procedure Thread2 ; stdcall;
 var
  item : TlistItem;
 begin
  //...
  item.delete;
  //...
 end;

 /.... and so on

线程同时被触发(它们之间可能相差 1 毫秒)。 然后我得到很多错误和AccessViolations。 请帮忙。谢谢你:)

【问题讨论】:

  • 您无法从应用程序主线程以外的线程访问 VCL 可视化控件。 IDE 甚至会插入一条注释来告诉您,当您自动使用File|New|Other|Thread Object 时。这解释了错误和访问冲突。 (顺便说一句,当您输入 erroraccess violation 时,您应该输入的接下来的事情是确切的错误消息或访问冲突消息,包括任何内存地址。说 errors and Access Violations 而没有其他信息毫无意义。我们无法从这里看到您的屏幕。:-)
  • 我投了反对票,因为您发布的代码甚至与您正在使用的任何真实代码都不相近。您没有展示导致错误的原因(甚至没有给出您收到的错误消息)。您可能刚刚发布了procedure DoNothing1; begin end; procedure DoNothing2; begin end;,它会是一样的。我要求你改进它并提供更多细节以便我们提供帮助,你发表了一些粗鲁的评论作为回应。所写的这个问题对未来的读者没有用处,因为它包含的信息不完整,甚至没有完全描述问题。
  • -1 表示这个问题很糟糕,而且你接受了一个我也反对的虚假答案。
  • @DavidHeffernan 大惊小怪。只是回答了一个不清楚的问题,没有理由拒绝投票,如果我真的理解这个问题,我会删除自己。
  • @opc0de 投反对票的原因是答案实际上不正确

标签: delphi delphi-7


【解决方案1】:

如果我是你,我会创建一个数据结构,主应用程序线程和所有更新线程都可以访问,并且可以同步,并且只有主应用程序线程用于更新 VCL 控件,如果这是你需要走的路。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多