在跨单元的线程中调用设置pagecontrol1.ActivePageIndex有关问题
在跨单元的线程中调用设置pagecontrol1.ActivePageIndex问题
我
这样设计主窗口的pagecontrol1激活的标签页,会导致那个标签页内所用控件消失..
form1.pagecontrol1.ActivePageIndex:=2 ;
但是如果你在非线程中激活过这个标签页,或者之前你手工激活过这个标签页,那么就正常显示.
另外
在线程中处理listview也会导致某个标签页所有控件消失.
用form1.ListView2.Refresh;都不管用
但是在线程处理listview之前,先手工或者在非线程中切换到这个标签页,那么显示就会正常.
然后贴下我更新listview的方法
比较两个图片,
这个是自己先手工点那个标签页后才触发线程.
可以正常显示数据.

然后是一个直接触发线程的.
整个标签页都空白了.

------解决方案--------------------
这个不能在线程操作VCL控件早就说过了! VCL控件不是线程安全的。
所以你可以使用消息! PostMessage来通知界面做事情
我
这样设计主窗口的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;
比较两个图片,
这个是自己先手工点那个标签页后才触发线程.
可以正常显示数据.
然后是一个直接触发线程的.
整个标签页都空白了.
------解决方案--------------------
这个不能在线程操作VCL控件早就说过了! VCL控件不是线程安全的。
所以你可以使用消息! PostMessage来通知界面做事情