繁体   English   中英

在WPF应用程序中创建新窗口

[英]Creating new windows in a WPF application

我正在编写一个WPF应用程序,它将监视提要。 当从Feed中确定有新项目时,我想作为一个通知从小窗口中生成。 如果有人熟悉OS X上的Growl,那就是我想做的事情。 另外,我将指出这是我的第一个WPF应用程序(也是我第一次做一段时间以来不是Web应用程序的事情!)。

我本来是这样的代码:

foreach(var feedNotification in newFeedNotifications) {
  var popupWindow = new PopupWindow() { ... };
  popupWindow.Show();
}

问题是,上面是非常 CPU密集型的,在那里它采取大约50%的CPU使用率点。 另外,我希望能够跟踪屏幕上的通知的位置,以便在下一个检查发现更多要显示的内容时,它知道最后一个当前可见的位置在哪里,而新的显示在另一个下方。

在确保运行该应用程序的计算机不会受到干扰的同时,我将如何实现这一目标?

编辑:我正在使用.NET 3.5 SP1框架

我不是100% ,但是我认为将窗口的新实例生成到由主窗口(或其中的对象)维护的集合中会更加有效。 然后,您可以创建一个可由新生成的窗口订阅的事件。 一旦新窗口正在监视来自主窗口或对象的更新,您就可以在主窗口上触发事件,并让通知窗口负责其余的工作。

至于通知窗口跟踪,您可以允许通过另一个事件连接来通知通知窗口,其中有一个新窗口要显示,然后将其传递给它们(或允许它们从主对象中检索它)。通过跟踪窗口何时获得焦点,将该窗口直接置于当前可见通知的下方。 因此,最后一个获得焦点的窗口就是最后一次查看的窗口。 拥有现有窗口后,只需在相同位置(或稍微偏移)创建一个新窗口,然后调用位于顶部的窗口的焦点即可。

通过焦点检查跟踪活动窗口的另一种方法是只浏览主窗口中包含的窗口对象的集合,因为该集合将按照创建的顺序进行。 希望这可以帮助。

一分钟前发现此链接有关弹出控件,这些弹出控件具有一些有用的属性。

是否绝对有必要为每个通知创建一个新窗口? 尽管我没有对此进行衡量,但是创建新的WPF窗口可能是一项占用大量CPU的任务。 如果真是这样,那么您可以做很多事情来更改代码以使用更少的CPU。

是否可以仅创建一个通知窗口,并且该窗口将包含所有新通知的列表? 我意识到这不是Growl的工作方式,但是它将以不同的方式提供相同的信息。

为什么不使用Windows版本的Growl? http://www.growlforwindows.com

如果不可能,则只需创建一个透明窗口,其内容为ItemsControl; ItemsControl源是您的通知

我不确定CPU的使用率(我不太在意所有机器上是否都具有良好的GPU的双核),但看起来您正在尝试执行“气球弹出”操作,并且该项目不错要重用的是codeproject WPF NotifyIcon (这是我在自己的RSS阅读器中使用的)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM