0
シングルトンクラス内でsignalR接続をセットアップしているので、プロジェクト全体で同じ接続を使用できます。問題は、接続が開始されず、コードがawait hubConnection.Start()
行を超えて実行されないことです。ただし、これを単一クラス外で実行すると、瞬時に接続が開始されます。私は何が間違っているのだろうか。ここ はシングルトンクラスの私の定義です:シングルトンクラス内でSignalR接続が開始されない
public sealed class ProxySubscriber
{
private static volatile ProxySubscriber instance;
private static object syncRoot = new Object();
private IHubProxy chatHubProxy = null;
private HubConnection hubConnection = null;
public event Action<string, string> OnConnect;
private ProxySubscriber()
{
if (hubConnection == null) { hubConnection = new HubConnection("http://cforbeginners.com:901"); }
if (chatHubProxy == null) { chatHubProxy = hubConnection.CreateHubProxy("ChatHub"); }
chatHubProxy.On<string, string>("onConnected", (id, username) => OnConnect.Invoke(id, username));
}
private async Task<string> StartConnection()
{
await hubConnection.Start();
return "Connection started..";
}
public async void InvokeConnect()
{
await chatHubProxy.Invoke("Connect", "Mujtaba");
}
public static async Task<ProxySubscriber> GetInstance()
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
{
instance = new ProxySubscriber();
}
}
}
await instance.StartConnection();
return instance;
}
}
私はこのようなシングルトンクラスを使用しています:あなたでGetInstance()非同期を作るドント、
ProxySubscriber proxySubscriber = ProxySubscriber.GetInstance().Result;
proxySubscriber.OnConnect += proxySubscriber_OnConnect;
proxySubscriber.InvokeConnect();
涼しいです。私はこれらの変更を行い、事がよりうまくいくかどうかを見ていきます。第6ポイントについては、既に接続があるかどうかを確認するにはどうすればよいですか? –
また、インスタンスを使用している各フラグメントでStartConnection()メソッドを呼び出す必要がありますか? –
ありがとう!あなたは素晴らしいです!!! –