簡體   English   中英

Windows Service通過WPF Outlook樣式控件通知用戶不可見

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM