我有一个相当大的C#Forms应用程序。有一个MdiParent控制着很多MdiChild。我还创建了一个“加载屏幕”,当用户打开需要一些加载时间的表单时,它会始终跳到顶部。
问题是,如果有异常,我通常在catch中使用类似Messagebox.Show(ErrorNumber)的东西,因此用户知道发生了什么。当我的加载屏幕打开,并显示一个消息框时,无法单击它。
我想调整一下。有没有办法将函数放在我的MdiParent(或其他地方,只要它只是一次)所以它会在显示MessageBox时运行代码?这样,我可以轻松调用一个函数来关闭我的加载屏幕。可能还有其他解决方案,但我想了解更多有关窗口把手,挂钩等的信息。
答案 0 :(得分:1)
我认为这是一个糟糕的主意。 Imho,而不是练习这样的伏都教,你应该解决真正的问题,这是你处理异常的方式。固定代码可能如下所示:
catch(Exception ex)
{
CloseLoadingScreen();
MessageBox.Show(ErrorNumber);
}
我的意思是,你可以自由地探索窗口钩子和东西,只是你选择了一个糟糕的场合。
编辑:我认为重构代码的正确方法是实现一个实体,其唯一目的是通知用户重要的事情。该实体将具有关于加载屏幕状态和其他相关内容的知识,并且根据该上下文将执行一组动作(显示消息框,写入日志,关闭加载屏幕等)。然后,您可以在需要发送通知时使用此实体。这样,无论何时想要更改通知逻辑,都不需要遍历所有catch语句。它可以成为单一的,以便于访问。
答案 1 :(得分:0)
您可以订阅Application.EnterThreadModal
活动。
每次您的应用程序即将进入模态时都会引发此问题(例如,因为它将要显示一个消息框)。
请注意,还有相应的Application.LeaveThreadModal
事件。