0

2 番目のケースで例外がスローされるのはなぜですか?

async void f() {
    await media.InitializeAsync();
    isInit = true;
    capturePreview.Source = media;
    await media.StartPreviewAsync(); // Ok
}

// ------------------------------------------

void f() {
    StaticClass.g(capturePreview.Source);
}

public static class StaticClass {
    public static async void g(MediaSource source) {
        await media.InitializeAsync();
        isInit = true;
        source = media;
        await media.StartPreviewAsync(); // Unknown Exception (It's seems that media isn't init)
    }
}
4

2 に答える 2

1

f()関数は を含む関数を使用しますasync。だから私f()も署名する必要があると思いasyncます。このような:void async f(){...}

于 2012-09-21T08:12:59.383 に答える
0

本当にメディアを初期化したいのなら、残りのコードを .done 関数で実行してみませんか?

 void f() {
     StaticClass.g(capturePreview.Source);
    }

  public static class StaticClass {
     public static async void g(MediaSource source) {
       media.InitializeAsync().done(
       isInit = true;
       source = media;
       await media.StartPreviewAsync(););
     }
  }

完了したコールバック内で非同期を実行できるかどうか完全にはわかりませんが。

于 2012-08-16T17:43:26.083 に答える