2009-06-02 34 views
0

我正在编写一个WPF应用程序,它将监视一个提要。当从Feed中确定新项目时,我想从小窗口中产生通知。如果有人熟悉OS X上的Growl,那就是我正在尝试做的。另外,我会指出这是我的第一个WPF应用程序(并且第一次做了一段时间不是Web应用程序!)。在WPF应用程序中创建新窗口

我原来做这样的代码:

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

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

我该如何去实现这个目标,同时确保运行该应用程序的计算机不会受到牵连?

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

+0

您使用的是Framework 3.5还是3.5.1?启动时间和性能有很大差异。 – TalkingCode 2009-06-02 10:56:13

回答

2

我不是100%这一点,但我认为这将是更有效产卵窗口的新实例放入由主窗口(或其中的对象)维护的集合中。然后,您可以创建一个可以由新产生的窗口订阅的事件。一旦新窗口正在观看主窗口或对象的更新,您只需在主窗口上触发事件并让其他窗口处于通知窗口即可。

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

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

一分钟前发现this link关于弹出式控件有一些有用的属性绑定到他们。

1

是否有必要为每个通知创建一个新窗口?虽然我没有测量过,但可能是因为创建新的WPF窗口是一项CPU密集型任务。如果是这样的话,那么你可以做更多的代码来使用更少的CPU。

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

0

我不确定CPU利用率(并且在我所有的机器上都具有良好GPU的双核心,我并不在乎它),但它看起来像是在尝试做一个“气球弹出”并且重新使用的好项目是codeproject WPF NotifyIcon(这是我在我自己的RSS阅读器中使用的)

1

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

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

+0

我没有意识到存在,但我正在尝试做的是一个POC,用于集成一些不打算集成的系统。使用这将破坏我想要做的事情的目的 – 2009-06-03 00:56:59

相关问题