[英]ActiveX Control In WPF Windows Form Host Not Displaying After Becoming Visible
[英]Windows Service notifying user with WPF outlook style control not becoming visible
更新:我們仍在使用XP,而且我的解決方案也可以使用,但是現在知道Vista和以后的會議都是孤立的,因此我將實現WCF IPC。
我有一個Windows服務,需要通知用戶某種類型的事件正在發生。 我認為類似電子郵件通知消息的內容很有意義。 使用WPF做這樣一個簡單的UI也很有意義。 這將使我學習一些基礎知識。
我運行一個線程:
Thread thread = new Thread(new ThreadStart(RunUserNotificationOnIndependantThread));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
然后設置對象並調用調用DoubleAnimation.BeginAnimation的方法
private void RunUserNotificationOnIndependantThread()
{
UserNotificationWithImage test = new UserNotificationWithImage();
test.Title = _title;
test.Url = _url;
test.Message = _message;
test.LoadUserNotification();
}
public void LoadUserNotification()
{
Rect workAreaRectangle = System.Windows.SystemParameters.WorkArea;
Left = workAreaRectangle.Right - Width - BorderThickness.Right;
Top = workAreaRectangle.Bottom - Height - BorderThickness.Bottom;
_fadeInAnimation.Completed += new EventHandler(_fadeInAnimation_Completed);
// Start the fade in animation
BeginAnimation(UserNotificationBase.OpacityProperty, _fadeInAnimation);
}
調試器到達BeginAnimation(...),並且沒有窗口出現。 這甚至有可能還是我在嘗試此操作時做錯了什么???
UserNotification代碼基於Nicke Andersson的博客: WPF Desktop Alert博客
謝謝你的幫助!!
在XP上,與桌面交互的服務有兩個要解決的嚴重問題-沒有用戶登錄時該怎么辦以及幾個用戶登錄時該怎么辦(快速用戶切換和終端服務是兩種最常見的登錄方式多於一個用戶)。
在Vista上,出於安全原因,服務在它們自己的隔離桌面上運行,因此您顯示的任何UI都將在該特殊桌面上運行,任何用戶都無法訪問。
您應該編寫一個小型的Gui程序,該程序在用戶的桌面上運行,並使用某種IPC(遠程處理,Soap,Rest,命名管道,文件,隨便什么)與服務進行通信。
一般來說,我根本不建議Windows服務直接與用戶的桌面進行交互。 舉一個簡單的例子,出現問題是因為該服務可能在任何用戶登錄之前啟動。 我的建議是創建一個小型應用程序,該應用程序以用戶會話啟動,並通過IPC(進程間通信)(例如WCF)與Windows Service通信。
但是,如果您想嘗試使其運行,我的提示將是打開該服務的“允許與桌面交互”,我似乎還記得該開關在Vista中根本不起作用,但其他人應該確認。
HTH Alex
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.