在跨单元的线程中调用设置pagecontrol1.ActivePageIndex有关问题

在跨单元的线程中调用设置pagecontrol1.ActivePageIndex问题

这样设计主窗口的pagecontrol1激活的标签页,会导致那个标签页内所用控件消失..

form1.pagecontrol1.ActivePageIndex:=2 ;
但是如果你在非线程中激活过这个标签页,或者之前你手工激活过这个标签页,那么就正常显示.

另外
在线程中处理listview也会导致某个标签页所有控件消失.
用form1.ListView2.Refresh;都不管用
但是在线程处理listview之前,先手工或者在非线程中切换到这个标签页,那么显示就会正常.


var
hThread: THandle; {线程句柄}
threadid:dword;

....
hthread := createthread(nil,0,@get_Search,nil,0,threadid); //用线程获取

{这里是我线程的用法
get_Search() 在另外的单元
}


然后贴下我更新listview的方法

var
item: TListItem;

....


form1.ListView2.Items.BeginUpdate;
item := form4.ListView2.Items.Add;
item.Caption := '第 ' + IntToStr(item.Index) +'行' ;
item.SubItems.Add(Format('%d%d', [item.Index, 0]));
item.SubItems.Add(Format('test', [item.Index, 0]));
form1.ListView2.Items.EndUpdate;
form1.ListView2.Refresh;



比较两个图片,
这个是自己先手工点那个标签页后才触发线程.
可以正常显示数据.
在跨单元的线程中调用设置pagecontrol1.ActivePageIndex有关问题


然后是一个直接触发线程的.
整个标签页都空白了.
在跨单元的线程中调用设置pagecontrol1.ActivePageIndex有关问题




------解决方案--------------------
  这个不能在线程操作VCL控件早就说过了! VCL控件不是线程安全的。

所以你可以使用消息! PostMessage来通知界面做事情