【发布时间】:2011-12-30 13:40:00
【问题描述】:
我的 WPF 应用程序中有大约 15 个窗口,每个窗口调用一个类进行操作
例如:加载、删除等,我不想在每个窗口中添加弹出控件。每一次操作
操作类中的方法以Window为参数,有什么方法可以显示
操作方法在此窗口弹出操作进度信息?
或任何其他更好的方法来显示进度消息,同时显示进度消息
应禁用窗口以阻止用户进行任何其他操作。
谢谢
【问题讨论】:
我的 WPF 应用程序中有大约 15 个窗口,每个窗口调用一个类进行操作
例如:加载、删除等,我不想在每个窗口中添加弹出控件。每一次操作
操作类中的方法以Window为参数,有什么方法可以显示
操作方法在此窗口弹出操作进度信息?
或任何其他更好的方法来显示进度消息,同时显示进度消息
应禁用窗口以阻止用户进行任何其他操作。
谢谢
【问题讨论】:
根据您的说法,您的状态窗口是一个模式窗口。如果您让所有操作类实现相同的接口来报告进度(并且还通知正在完成的操作,我猜),您可以只创建一个状态窗口,您可以在操作完成时实例化,并且您会调用使用 ShowDialog。
【讨论】:
我会创建一个静态类来管理状态消息,并让主窗口在这些消息进入时进行监听。这样只有主窗口负责显示弹出窗口,所有其他窗口都转到一个地方报告状态更新。
伪:
static class StatusManager
{
delegate onMessageReceivedEvent(string message);
static event onMessageReceivedEvent OnMessageReceived;
static void PostMessage(string message)
{
if(OnMessageReceived != null)
OnMessageReceived.Invoke();
}
}
在您的主窗口中,只需 += OnMessageReceived 并在事件中发布消息。
此外,如果您只想让状态消息一直显示直到所有其他消息都完成,请保留正在运行的窗口的计数器,一旦达到 0,请关闭弹出窗口。您可以简单地在弹出窗口中监听事件并以这种方式更新 gui。请记住检查调度程序以确保更新 gui 是安全的。
【讨论】:
Pseudo和static。