Win8 C#与async / await有关

时间:2012-08-16 16:45:42

标签: c# windows-8 microsoft-metro c#-5.0

为什么在第二种情况下抛出异常?

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)
    }
}

2 个答案:

答案 0 :(得分:1)

f()函数使用包含async的函数。 所以我认为f()也应该签名async。 像这样:void async f(){...}

答案 1 :(得分: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(););
     }
  }

即使我不完全确定你可以在完成的回调中做异步。