2009-07-03 69 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();