2011-06-01 92 views
2

我有一个C# app我想从托盘图标运行。基本上它不应该显示在任务栏最小化时,但当双击托盘图标时,应用程序窗口应显示为正常。C#应用程序 - this.show()和this.hide()导致应用程序挂起

为了达到这个目的,我使用了this.Show()this.Hide(),这些都是我想要的。我遇到的问题是,对于某些用户在显示应用程序时,表单会显示,但是没有任何UI被正确绘制,并且在窗体下方打开的任何内容都会显示。表单变得完全没有反应,但我仍然可以通过双击托盘图标隐藏并显示...

如果我将.Show().Hide()移开,应用程序运行时不会对用户造成任何问题。

我正在做主线程上的所有UI和检查InvokeRequired是双重确定的,因为我确实有worker thread但无法解决此问题。另一点是它不会一直发生,通常只发生在用户的机器空闲一段时间之后。

我真的很感谢这方面的帮助。这些机器是WinXP使用.NET 3.5VS2008

+0

您可以在空闲时间前后(应用程序冻结时)检查应用程序的内存使用情况吗?观察使用过程中应用程序的内存使用情况,使用过程中是否频繁增加?我知道这不是一个答案,因此评论,但检查任务管理器中的memroy可能是朝正确的方向检测任何可能的内存泄漏的一步。 Usualy应用程序由于内存问题或偏离课程而冻结,线程被阻塞。如果你的内存是完美的,也许GC在一段空闲时间后会转储一些线程的资源,这会在回来时导致线程损坏。只是一个猜测。 – Nope 2011-06-01 10:51:51

回答

0

你什么时候调用this.Show和this.Hide?

您可以比较或尝试如果没有正确完成,则该方法在http://www.developer.com/net/net/article.php/3336751/C-Tip-Placing-Your-C-Application-in-the-System-Tray.htm

详细,那么我认为你可以进入的情况下的O/S是混淆一个形式的国家,例如,可能认为该表单已经显示,因此不会完全重新绘制。

+0

我正在这样做,虽然我相信你可能已经指出我在正确的方向。我发现了另一个Hide()被调用的位置,这可能导致两个调用之间没有Show()。我现在要将它发布给用户,看看它是否能解决问题。 – Phil 2011-06-02 11:22:54

相关问题