0

ConnectAsync メソッドの終了を待っているときに、別のメソッドを呼び出す必要があります。私はスレッドプール、サイクルなどを試しますが、メソッド ConnectAsync を開始するとすぐに次のメソッドを呼び出しますが、最初に ConnectAsync メソッドを終了してからメソッドを呼び出す必要があるため、同じ問題が発生します。メソッド ConnectAsync は Web ソケット クライアントのサーバーに接続しており、接続時にメソッドを呼び出す必要があります (メソッドは別のページに移動します)。何か案が?.

待機中のメソッド: await socket.ConnectAsync(server)

終了を待っているときに呼び出したい私のメソッド: Frame.Navigate(typeof(MainContentPage));

私の Web ソケット クライアントのメソッド:

public async void _connect(string token, string idInstalation, string lang)
    {
        try
        {
            if (token!=null){
            socket.SetRequestHeader("Token", token);
            socket.SetRequestHeader("Lang", lang);
            socket.SetRequestHeader("idInstallation", idInstalation);
            }
            await socket.ConnectAsync(server);
            System.Diagnostics.Debug.WriteLine("Connected");
            connected = true;
            writer = new DataWriter(socket.OutputStream);
            messageNumber = 1;
        }
        catch (Exception)
        {
            var dialog = new MessageDialog("Cannot connect to server", "Error").ShowAsync();
        } 
    }

public static void connect(string token, string idInstalation, string lang)
    {
        instance._connect(token,idInstalation,lang);
    }

websocket メソッドを呼び出しているメインページ:

private void connectMe()
 {
  WebSocketClient.connect(null, null, null);
  Frame.Navigate(typeof(MainContentPage));
 }
4

3 に答える 3

2

Steven が既に指摘したように、メソッドのシグネチャを void から Task に変更する必要があります。これにより、非同期メソッドが完了した後にコードを実行できます。

    public async Task _connect(string token, string idInstalation, string lang)
    {
        ...
    }

    public static Task connect(string token, string idInstalation, string lang)
    {
        await instance._connect(token,idInstalation,lang);
    }

次に、呼び出し方法を調整する必要があります。

    private void connectMe()
    {
        await WebSocketClient.connect(null, null, null);
        Frame.Navigate(typeof(MainContentPage));
    }

非同期で作業する場合、非同期呼び出しの後に実行したいコードがある場所まで待機する必要があります。

于 2013-10-11T08:56:48.757 に答える