2009-06-02 76 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

相關問題