2009-09-08 40 views
0

我有一個問題,我希望找到最好的和最容易實現的解決方案。WPF應用程序在遠程訪問會話期間移出屏幕

我寫了一個WPF應用程序,可以在桌面上拖動,但我通常把它放在屏幕的右上角。

我的問題是,當我從另一個位置進行遠程撥號時 - 分辨率總是較低 - 應用程序不在屏幕上,除非我終止進程並重新啓動它,否則無法取回應用程序。

我想到了一些想法以便始終保持可見。

1]當它運行時,它會產生一個子線程來檢查循環中的可見分辨率。當它位於檢測範圍之外時,它將更新其位置。

2]使用某種消息傳遞系統在遠程進入時發送消息 - 這將觸發它重新對齊自己。

有沒有人有任何建議?

回答

2

您可以定期觸發DispatcherTimer(每隔幾秒)以確保窗口位於其中一個可見屏幕上。如果沒有,它會重新定位,以便它。

即使使用WPF,也可以使用System.Windows.Forms.Screen類訪問有關用戶桌面和屏幕設置的信息。

喜歡的東西:

bool isWithin = false; 
foreach (Screen screen in Screen.AllScreens) 
{ 
    if (screen.Bounds.Contains(windowLocation)) 
     isWithin = true; 
} 

// if !isWithin, move to 0,0 
+0

感謝德魯 - 如何將一個dispatchertimer從一個新的線程有什麼區別? – Grant 2009-09-08 13:08:46

+1

由於需要對齊右上角的額外要求,您需要像這樣訪問屏幕邊界。 +1 – 2009-09-08 13:14:13

+1

不客氣。 DispatcherTimer將在UI線程上觸發。這意味着您可以修改UI屬性而不會出現跨線程異常。避免使用新線程通常是一個好主意,因爲它們佔用額外的資源,並且您必須記得在關閉應用程序時清理它們。 – 2009-09-08 13:14:32