为什么向ListView中添加数据,手动没问题,自动程序就崩溃?

swxlion 2004-11-30 10:41:51
我用下面的代码向一个ListView添加数据,
TListItem *ItemT = new TListItem( PSForm->ListViewPSShow->Items );
/*TListItem *ItemT;*/
ItemT = PSForm->ListViewPSShow->Items->Add();
ItemT->Caption = String( pCurrPs->PsData.PID );
ItemT->SubItems->Add( String( pCurrPs->PsData.PPID ) );
ItemT->SubItems->Add( pCurrPs->PsData.PsName );
ItemT->SubItems->Add( String( pCurrPs->PsData.ThreadNum ) );
可为什么当把该段代码写到按钮中,手动点击按钮添加就没有问题,
而使用一个线程自动调用,程序就马上崩溃?用Debug说是错误发生在ListView VCL内部。
当加入一个MessageBox( NULL, "asd", NULL, NULL );(源代码,写asd只是为了随便显示点东西。目的是要确认运行到那里了,当时还没想要下断点)后,Debug说错误发生在VCL内部,但不在ListView VCL中,在一个什么Message中。无论线程是否使用TThread都一样。基本上确认相关代码中没有指针有问题(因为除了以上几句外,其它全是纯C++和API的代码,没有与BCB或VC相关的东西。且在VC中调试通过的(只是调的函数不一样,BCB中调用以上代码,VC中是空函数),所以相关指针不应该有错,反复查看了好几遍啦都)。
...全文
138 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
gpg 2004-12-04
  • 打赏
  • 举报
回复
//例
TYourThread::DoAdd()
{
TListItem *ItemT = new TListItem( PSForm->ListViewPSShow->Items );
/*TListItem *ItemT;*/
ItemT = PSForm->ListViewPSShow->Items->Add();
ItemT->Caption = String( pCurrPs->PsData.PID );
ItemT->SubItems->Add( String( pCurrPs->PsData.PPID ) );
ItemT->SubItems->Add( pCurrPs->PsData.PsName );
ItemT->SubItems->Add( String( pCurrPs->PsData.ThreadNum ) );

}
TYourThread::Execute()
{
while(...)
{
...
Synchronize(DoAdd);
...
}
}
gpg 2004-12-04
  • 打赏
  • 举报
回复
用Synchronize方法把他包装以下就OK了。

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧