0

我有一个相当大的 C# Forms 应用程序。有一个 MdiParent 控制着许多 MdiChilds。我还创建了一个“加载屏幕”,当用户打开需要一些加载时间的表单时,它总是跳到顶部。

问题是,如果有异常,我通常在 catch 中使用 Messagebox.Show(ErrorNumber) 之类的东西,这样用户就知道发生了什么。当我的加载屏幕打开并显示一个消息框时,无法单击它。

我想调整一下。有没有办法在我的 MdiParent (或其他地方,只要它只是一次)中放置一个函数,以便在显示 MessageBox 时运行代码?这样,我可以轻松地调用一个函数来关闭我的加载屏幕。可能还有其他解决方案,但我想了解更多关于窗口把手、挂钩等的信息。

4

2 回答 2

1

我认为这是一个糟糕的主意。恕我直言,您应该解决真正的问题,而不是练习这种巫术,这就是您处理异常的方式。固定代码可能如下所示:

catch(Exception ex)
{
    CloseLoadingScreen();
    MessageBox.Show(ErrorNumber);
}

我的意思是,你可以随意探索窗钩之类的东西,只是你选择了一个糟糕的时机。

编辑:我认为重构代码的正确方法是实现一个实体,其唯一目的是通知用户重要的东西。该实体将了解加载屏幕状态和其他相关内容,并根据此上下文执行一组操作(显示消息框、写入日志、关闭加载屏幕等)。然后,您可以在需要发送通知时使用此实体。这样,当您想要更改通知逻辑时,您就不需要遍历所有的 catch 语句。它可以做成一个单例以便于访问。

于 2013-08-09T08:24:51.800 回答
0

您可以订阅该Application.EnterThreadModal事件。

每次您的应用程序即将进入模态状态时(例如,因为它即将显示一个消息框),都会引发此问题。

请注意,还有一个相应的Application.LeaveThreadModal事件。

于 2013-08-09T08:19:58.747 回答