0

私はトレイにとどまるアプリケーションを構築しています。時々サービス呼び出しを行い、サービスが結果を返すと、右下隅に素敵なウィンドウとして表示されます。
コードプロジェクトとして見栄えの良いコンポーネントを見つけました - http://www.codeproject.com/Articles/277584/Notification-Window この通知は、フォームアプリケーションで使用するとうまく機能しますが、ApplicationContext から表示しようとすると、アプリケーションが停止します- 通知は表示されていますが、クリックしようとすると応答エラーが発生します。

class TrayContext : ApplicationContext
{
    private System.Timers.Timer appointmentTimer;
    private PopupNotifier notification;

    public TrayContext()
    {
        notification = new PopupNotifier
            {
                AnimationDuration = 500, 
                ContentFont = new System.Drawing.Font("Tahoma", 8F), 
                Image = null, 
                OptionsMenu = null, 
                Scroll = false, 
                ShowHandCursor = false, 
                Size = new System.Drawing.Size(400, 100), 
                TitleFont = new System.Drawing.Font("Segoe UI", 11.25F)
            };

        //timer
        appointmentTimer = new System.Timers.Timer();
        appointmentTimer.Interval = 600000;
        appointmentTimer.Elapsed += AppointmentTimerTimerElapsed;
        appointmentTimer.Start();
    }
    private void AppointmentTimerTimerElapsed(object sender, ElapsedEventArgs e)
    {
        appointmentTimer.Stop();
        notification.TitleText = "Test";
        notification.ContentText = "This should work";
        notification.Popup();
        appointmentTimer.Start();
    }
}

これが私が得ている動作です(カーソルはポインターではなくビジーです): ここに画像の説明を入力

デリゲートを使用してこれを実行しようとしていましたが、ApplicationContext を使用しているため、BeginInvoke メソッドはありませんが、以下のように追加しても役に立ちませんでした:

private void BeginInvoke(Delegate callback, object[] args)
{
    syncContext.Post(state => callback.DynamicInvoke((object[])state), args);
}

Form からはこの通知を表示できますが、ApplicationContext からはどのように表示すればよいでしょうか?

4

1 に答える 1

0

私はこれを理解しました。

私が使用していた:

private System.Timers.Timer appointmentTimer;

そのはず:

private System.Windows.Forms.Timer appointmentTimer;

しかし、これにはおそらくより良い解決策があります。おそらくより良い答えをもう少し待つので、私は自分の答えを正しいとマークしていません。

于 2013-06-20T07:43:25.943 に答える