listbox做了個目錄(單層),點擊一條就在另一個控件加載相應的內容。這個加載過程是耗時操作。
所以考慮用異步,在click處理函數裡開了子線程。因為需要操作UI,所以在子線程裡調用invoke,但是無論使用invoke還是beginInvoke,那個加載內容的函數都是在UI線程上執行。這樣就會造成UI線程阻塞。
想實現的效果是,一次點擊之後馬上能響應下一次點擊同時把上一次點擊的加載線程結束掉而執行當前點擊的加載線程。或者在下一次點擊的時候判斷上一次是否加載完成,如果沒完成則提示,等待完成。
哪位熟悉這個的有什麼好辦法?
如果原線程仍在執行的話是無法立即結束掉的,因為C#是托管代碼,需要通知真正的線程執行單元結束自己要花掉很長時間所以你的方法一不太好用。
方法二只需要聲明一個全局的線程對象在點擊時間發生後判斷下當前線程狀態就行了。
當前工作線程如果要調用UI線程顯示數據的話用這樣的語法:
工作線程:
{
Action act = ()=>{textBox1.Text = "1"};
textBox1.Invoke(act);
}