WPF - 在任务管理器中显示隐藏但活动的应用程序
我想为我的应用程序设置持久状态。让我解释。 启动时间有点长(主要是由于许多数据库请求到远程服务器,需要5-10秒,甚至更多,因为我的用户通常有太多的应用程序运行...),我想设置一种隐藏&的方式在需要时显示我的应用程序。WPF - 在任务管理器中显示隐藏但活动的应用程序
我现在正在做的是只减少应用程序时,用户点击红十字会托盘。 (只有当用户选择文件 - >退出时,应用程序才真正退出)。
所有用户推出其正在检查安装,那么版本的在线版本的安装程序,并在必要时启动它之前更新的应用程序。
现在,我希望它首先检查进程监视器(在任务管理器,进程选项卡中找到的进程监视器),并且如果进程已经在运行该应用程序,它将再次显示该窗口。否则,如果没有进程正在运行,我们可以处理经典检查 - 更新 - 然后启动步骤。 这将特别消除我经常遇到的很多愚蠢的客户请求(“嘿,您的应用程序需要很长时间才能加载,所以我再次点击它5次,并且它启动了6个实例!!!!”:/)并因此保存我花了很多无用的时间,要求他们停止启动同一个应用程序的50个实例,因为它不会让它变得更快...
所以我的主要问题是:如何在C#/ WPF中执行这样的技巧? 现在,我的最小化过程很简单(即使可能太简单):我只隐藏窗口&任务栏条目。现在我不知道如何来显示它从我的安装程序
任何想法了?
你的客户的要求永远是愚蠢的 - 他们付你钱。
为了使窗口前 - 创建全系统互斥锁,并检查其在应用程序启动的存在。如果它在那里 - 使用进程间通信机制将消息发送到其他实例以将其主窗口置于前面(窗口消息或命名管道 - 两者均可)。这里是an example(一定要检查相关的答案)。
,任何方式,只要你能防止一次又一次重新推出应用表明splash screen。如果它在1-2秒内不出现(2太长),那就很糟糕。您的应用程序的响应速度会让您觉得它的运行速度更快。
感谢您的链接!我省略了它,因为它看起来很完美,但我确实有一个启动画面。我会检查一下 – Damascus
这是你要找的东西吗?
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
}
如果用户抱怨启动时间,也许考虑检查,而不是启动退出的版本。
I have answered a very similar question yesterday.唯一缺少的只是一点还有就是如何隐藏和显示窗口:使用Window.Visibility
,将其设置为Visibility.Hidden
隐藏窗口和Visibility.Visible
再次显示它。
真是个好主意。我也会说你可以/应该有一个启动画面出现,并给用户反馈,该应用程序正在加载,并在后台线程上处理这些初始查询。 –
已经有一个启动画面,以完全清晰的方式显示加载状态。问题是我为交易员工作,他们总是有至少20个应用程序在6个以上的屏幕上运行,我无法以“TopMost”方式保持闪屏,因为它会干扰他们的工作,并且不检查它是否启动应用程序再次。我尝试添加一个NotifyIcon来获取信息,或者在TopMost中加载一个小的加载进度条,他们会继续启动它4到5次。不幸的是,现在该以另一种方式处理它:/ – Damascus