0

SignalR コードをテストするために、小さな WPF アプリケーションを作成しています。私が書いたことからすべてが機能しますが、よくわからないものに出くわしました。

イベントのイベント ハンドラーを作成しましたHubConnection StateChanged

_hub.StateChanged += (change) =>
{ 
    Console.WriteLine("hubConnection.StateChanged {0} => {1}", change.OldState, change.NewState);

    if (change.NewState == ConnectionState.Connecting)
    {
        statusCallBack callBack = new statusCallBack(UpdateStatus);
        this.Dispatcher.Invoke(callBack, "hubConnection.StateChanged");
    }
    if (change.NewState == ConnectionState.Connected)
    {
        Console.WriteLine("hello");
        statusCallBack callBack = new statusCallBack(UpdateStatus);
        this.Dispatcher.Invoke(callBack, "hubConnection.StateChanged");
    }
};

私のデリゲートメソッドstatusCallBackとメソッドは;

delegate void statusCallBack(string msg);

private void UpdateStatus(string msg)
{
    if (this.Dispatcher.CheckAccess() == true)
    {                
        this.tbStatus.AppendText(Environment.NewLine + DateTime.Now.ToLongTimeString() + " --- " + msg);
        this.tbStatus.CaretIndex = this.tbStatus.Text.Length;
        this.tbStatus.ScrollToEnd();
    }
}

ここで本当に明らかな何かが欠けている可能性がありますが、StateChangedハンドラーでメッセージをチェックConnectionState.Connectingしてラベルに出力すると、正常に機能します。

次に、SignalR HubConnection の状態が変わり、デリゲートを呼び出そConnectionState.Connectedうとすると、WPF アプリがロックされます。

コンソールに正常に出力され、コンソールに「hello」が出力されるかどうかを確認しますchange.NewState == ConnectionState.Connectedが、フリーズします。

ifアプリをデバッグすると、Connectedステートメント内に到達するchange.NewStateと、オブジェクトchange.OldStateが表示され、以下のエラー メッセージが表示されます。

ここに画像の説明を入力

拡大画像はこちら。

最初の if ステートメントでは機能するのに、2 番目の if ステートメントでは機能しない理由がわかりません。また、正しい値をコンソールに出力できるのはなぜですか?

ifチェックするために最初のステートメントをコメントアウトしてもConnectingConnected.

4

1 に答える 1