【问题标题】:How do I make a WPF/MVVM application do background processing before displaying a window?如何让 WPF/MVVM 应用程序在显示窗口之前进行后台处理?
【发布时间】:2013-01-21 23:47:05
【问题描述】:

我对 WPF 和 MVVM 还很陌生。我创建了几个标准的简单 WPF/MVVM 应用程序,它们显示启动屏幕并根据主窗口中的命令进行处理,包括显示其他用户控件。

但是现在我想制作一个 WPF/MVVM 监控/输入收集应用程序,它在不显示窗口的情况下启动,循环检查系统状态,直到条件需要显示窗口,然后才显示一个窗口,然后处理用户输入并返回循环。用户不会等待这个窗口,因为它只在有需要用户注意的事情时显示。它会“永远”在后台运行,只在需要时才显示自己。

我发现我可以创建自己的 Main() 方法,但我仍然无法找出将其保留在 MVVM 中的最佳方法,但只能在更大的循环中根据需要显示窗口。

谢谢!

编辑——我们终于做了一件理智的事情,做了两个不同的过程,一个做监控,一个做 WPFing。谢谢大家!

【问题讨论】:

  • 您可以在窗口打开之前在 app.xaml.cs 文件中进行处理,但要注意这需要多长时间。用户往往会认为有什么问题是他们在 2 秒内没有看到启动应用程序的响应。或许可以考虑一个信息窗口,例如斜线屏幕。
  • 谢谢,但它更像是一个用户通常不会看到的后台进程——更多的是弹出来表示需要注意,而通常不需要注意。如果我在显示窗口之前在 app.xaml.cs 中进行了处理,那么在第一次处理错误后,我将如何重新监控错误情况?
  • 使用某种通知窗口(又名 Toast)?它在 WPF 中不可用(就像在 WinForm 中一样),但人们已经创建了类似的东西,您可以使用:codeproject.com/Articles/22876/…
  • 您可以创建自己的窗口管理系统,该系统允许传递一个参数,告诉它在拥有所需的一切之前不要加载,然后才显示视图。然而,这将是一段棘手的小代码。
  • 是的,我同意让 Windows 服务显示一个窗口是个坏主意。然而,这就是她所描述的,我不是来判断的。更好的方法是创建一个 Windows 托盘应用程序,但同样,只是针对此处描述的要求提供建议。

标签: c# wpf mvvm


【解决方案1】:

Windows 服务似乎是进行监控的最佳方式。只要需要用户交互,您就可以向“世界”的其他地方发出信号,表明发生了某些事情。

WPF 客户端可以接收信号并显示 UI。可以使用 NotifyICon 隐藏 WPF 客户端。

MVVM 仅适用于 WPF 客户端。模型包含被监视的状态,视图模型将其转换为视图的模型,视图显示信息。

信号可以是由服务设置并由 WPF 客户端测试的Mutex。服务和客户端之间的通信可以通过WCF来实现。

【讨论】:

    猜你喜欢
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 2021-01-20
    • 2012-03-12
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    相关资源
    最近更新 更多