2009-07-03 70 views
0

完全消失我有做這個簡單的方法:列表框不是隱藏

private void searchButton_Click(object sender, EventArgs e) 
    { 
     searchResultsBox.Hide(); 
     doSomething(); 
    } 

searchResultsBox是一個列表框,當我把它的隱藏方法,它實際上並沒有完全消失,直到「DoSomething的'完成處理。它種葉文物(其實你仍然可以看到有一個空的形式,表面背後的箱的任何部分。

如果我註釋掉「DoSomething的」,它消失迅速。

如何任何想法解決這一問題?這只是一個有點難看。

回答

4

您可以嘗試在調用searchResultsBox.Hide()後調用this.refresh();

+0

賓果。我無法在窗體對象上找到刷新方法,所以我放棄了尋找。感謝那。 – ChristianLinnell 2009-07-03 03:16:49

0

聽起來像DoSomething的是過程密集型和阻塞GUI線程,不知道爲什麼它不會完成執行DoSomething的前隱藏列表。

我會嘗試把DoSomething的中到單獨的線程。

+0

doSomething只需要一秒鐘左右的時間運行,但它更新了GUI控件,因此它不能在另一個線程中悲傷。你是對的 - 這是奇怪的行爲。 – ChristianLinnell 2009-07-03 03:18:22

+1

您可以簡單地在另一個線程中運行它,從而否定更新控件的需要......或者如果您的意思是改變它們,則可以使用Invoke()將控制權交還給GUI線程以更改內容。 – 2009-07-03 03:32:39

0

單獨的線程或後臺工作進程是最好的答案。你也可以嘗試調用Application.DoEvents()。雖然我不贊成經常使用這個調用,但對於這個特定問題,這似乎很有效。

1

您不應該在GUI事件線程中執行重要的工作,因爲這會導致UI在忙於運行事件處理代碼時凍結。在另一個線程中執行任何長時間運行的任務是一種很好的做法,可以通過發信號通知另一個已經運行的線程來完成工作,或者通過現場啓動一個新線程。

new Thread(new ThreadStart(doSomething)).Start();