代碼如下:
CMy_Dlg* p_this_dlg=(CMy_Dlg*)lpParam; //傳遞的是對話框的指標
CListCtrl* p_listctrl=(CListCtrl*)(p_this_dlg->GetDlgItem(IDC_LISTCTRL1));
p_listctrl->DeleteAllItems();
int i_data_index=0;
for(int i=0;i<total_last_value_1.GetSize();i++)
{
int i_temp=i_data_index;
p_listctrl->InsertItem(i_temp,total_value_1.GetAt(i));
p_listctrl->SetItemText(i_temp,1,total_value_2.GetAt(i));
p_listctrl->SetItemText(i_temp,2,total_value_3.GetAt(i));
p_listctrl->SetItemText(i_temp,3,total_value_4.GetAt(i));
p_listctrl->SetItemText(i_temp,4,total_value_5.GetAt(i));
p_listctrl->SetItemText(i_temp,5,total_value_6.GetAt(i));
p_listctrl->SetItemText(i_temp,6,total_value_7.GetAt(i));
p_listctrl->SetItemText(i_temp,7,total_value_8.GetAt(i));
p_listctrl->SetItemText(i_temp,8,total_value_9.GetAt(i));
p_listctrl->SetItemText(i_temp,9,total_value_10.GetAt(i));
p_listctrl->SetItemText(i_temp,10,total_value_11.GetAt(i));
p_listctrl->SetItemText(i_temp,11,total_value_12.GetAt(i));
p_listctrl->SetItemText(i_temp,12,total_value_13.GetAt(i));
p_listctrl->SetItemText(i_temp,13,total_value_14.GetAt(i));
p_listctrl->SetItemText(i_temp,14,total_value_15.GetAt(i));
i_data_index++;
CString str_temp1241;
str_temp1241.Format("已顯示%d條資料",i_data_index);
p_this_dlg->SetDlgItemText(IDC_STATIC_STATUS,str_temp1241);
}
return 0;
我寫的是MFC基于對話框的程式,以上的代碼是在執行緒函式里實作的。往ListCtrl控制元件添加完資料后,點擊“關閉”按鈕,這個對話框(子對話框)可以正常關閉,但是它的父對話框(我是用DoModal的方法打開的子對話框)會有一段時間“未回應”(就好像是程式陷入了死回圈),而且添加往ListCtrl控制元件添加的資料越多,這個“未回應”的時間就越長。
我在DoModal的呼叫處做了個測驗,確實是程式在后臺處理什么東西。
我感覺應該是在清空ListCtrl控制元件中的內容,但是,我又不知道怎么避免這種情況……
希望知道的大神給指點一二……
不好意思,本人的分不多,只有這么多了……
uj5u.com熱心網友回復:
首先,在執行緒中操作UI是不妥的,建議在執行緒中PostMessage給主執行緒,由主程式操作UI其次,你在for回圈處理時應該判斷一下退出標志,一旦要退出了,能立馬從For回圈中中斷出來
再次,如果資料量大,用InsertItem和SetItemTex處理速度本來就相當慢,建議采用List的虛模式。
uj5u.com熱心網友回復:
OnClose里面標記TRUE,insertitem前面加個標記,如果為TRUE就break
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/153546.html
標籤:基礎類
