【问题标题】:WPF - Show an application hidden but active in the Task ManagerWPF - 在任务管理器中显示隐藏但处于活动状态的应用程序
【发布时间】:2011-07-04 10:52:33
【问题描述】:

我想为我的应用程序设置一个持久状态。让我解释。 启动时间有点长(主要是由于对远程服务器的许多数据库请求,这需要 5-10 秒,甚至更多,因为我的用户通常运行的应用程序太多......)我想设置一个在需要时隐藏和显示我的应用程序的方法。

我现在正在做的是仅在用户点击红十字时将应用程序减少到托盘。 (应用程序只有在用户选择 File -> Exit 时才会真正退出)。

所有用户都在启动一个安装程序,它会检查已安装的版本,然后是在线可用的版本,并在启动前更新应用程序(如果需要)。

现在,我希望它首先检查进程监视器(在任务管理器的进程选项卡中找到的监视器),如果某个进程已经在为应用程序运行,它只会再次显示该窗口。否则,如果没有进程在运行,我们可以处理经典检查更新然后启动步骤。 这尤其会消除我经常遇到的许多愚蠢的客户请求(“嘿,您的应用程序加载时间太长,所以我再次单击它 5 次,它启动了 6 个实例!!!!”:/)因此节省了我花了很多无用的时间要求他们停止启动同一应用程序的 50 个实例,因为它不会让它变得更快......

所以我的主要问题是:如何在 C#/WPF 中执行这样的技巧? 现在,我的最小化过程有点简单(即使可能太简单了):我只是隐藏窗口和任务栏条目。现在我不知道如何从我的安装程序中显示它

有什么想法吗?

【问题讨论】:

  • 真是个好主意。我还想说,您可以/应该出现一个启动屏幕并向用户反馈应用程序正在加载,并在后台线程上处理这些初始查询。
  • 已经有一个启动画面,它以非常清晰的方式显示加载状态。问题是我为交易者工作,他们总是在 6 个以上的屏幕上运行至少 20 个应用程序,我不能以TopMost 的方式保持启动画面,因为它会干扰他们的工作,并且在不检查的情况下启动应用程序再次。我尝试添加 NotifyIcon 以获取信息,或者在 TopMost 中添加一个小的加载进度条,他们不断启动它 4 或 5 次。不幸的是,现在是时候以另一种方式处理它了:/

标签: c# wpf .net-4.0 process


【解决方案1】:

客户的要求永远不会是愚蠢的——他们付钱给你。

要将窗口置于前面 - 创建系统范围的互斥体并在应用程序启动时检查它的存在。如果它在那里 - 使用进程间通信机制向另一个实例发送消息以将其主窗口置于前面(窗口消息或命名管道 - 两者都可以)。这里是an example(请务必检查相关答案)。

无论如何,请尽快显示splash screen,以防止一次又一次地重新启动应用程序。如果它没有在 1-2 秒内出现(2 太长),那就不好了。您的应用程序的响应速度让人感觉它运行得更快。

【讨论】:

  • 感谢您的链接!我省略了它,因为它看起来很合乎逻辑,但我确实有一个启动画面。我会检查的
【解决方案2】:

你正在寻找这样的东西吗?

foreach (var p in Process.GetProcesses()) 
{
    if (p.ProcessName.Contains("myProcess"))
    {
        //process is already running
    }
}

或者,使用 LINQ:

if (Process.GetProcesses().Where(p => p.ProcessName.Contains("myProcess")).Any())
{
    //process is already running
}

如果用户抱怨启动时间,也许可以考虑在退出时检查版本,而不是启动。

【讨论】:

  • 如果您同时启动应用程序的两个实例,都决定另一个正在运行并都退出,该怎么办?
  • 没错,但我相信那将是一个极端情况。不过,你是对的。
  • 如果我们不必处理边缘情况,编程会很容易。
  • 不错的一个!我会试试这个。 svick 带来的案例在我的案例中不会发生,因为用户正在启动一个安装程序,然后调用实际的应用程序,内存中不能有两个应用程序实例
【解决方案3】:

I have answered a very similar question yesterday. 唯一缺少的一点是如何隐藏和显示窗口:使用Window.Visibility,将其设置为Visibility.Hidden 以隐藏窗口并设置为Visibility.Visible 以再次显示它。

【讨论】:

    猜你喜欢
    • 2019-07-04
    • 1970-01-01
    • 2012-08-27
    • 2016-02-04
    • 1970-01-01
    • 2023-03-30
    • 2018-05-29
    • 1970-01-01
    相关资源
    最近更新 更多