2011-03-14 97 views

回答

3

即使在你做一个线程中的选取框,你仍然必须将它与主线程同步显示,所以如果你继续在主线程中进行冗长的数据加载,你仍然会遇到同样的问题。因此,请将数据加载到单独的线程中,然后将选框(以及所有其他UI元素和逻辑)留在主线程中,即它所属的位置。开始时你不应该在主线程中进行阻塞操作。

0
HANDLE hThread; 
DWORD ThreadId; 
int Data_Of_Thread_1 = 1; 

unsigned long __stdcall ThreadFunc(void *Arg) 
{ 
    int a=0; 
    while(a != 100000000000000000) 
    { 
     a++; 
     Form1->ListBox1->Items->Add(a); 
    } 

    return 0; 
} 

void __fastcall TForm1::Button1Click(TObject *Sender) 
{ 
    // hThread=CreateThread(NULL,0,ThreadFunc,0,0,&ThreadId); 
    hThread = CreateThread(NULL, 0, ThreadFunc, &Data_Of_Thread_1, 0, &ThreadId); 
    if (hThread == NULL) 
    { 
     ExitProcess(Data_Of_Thread_1); 
    } 
} 

void __fastcall TForm1::Button2Click(TObject *Sender) 
{ 
    TerminateThread(hThread,ThreadId); 
} 
+0

感谢您的回复! – 2011-06-09 02:57:41

+0

这并不安全!您不应该在线程中调用VCL方法。 – 2012-11-21 17:09:46