1

Sqlite DB を使用する必要がある Win8 アプリがあります。アプリが起動するたびにファイルが存在することを確認し、存在しない場合はコピーしようとします。問題は、コピーすると、コピーが終了する前にアプリがそれを開こうとし、エラーが発生することです:

次の関数を呼び出して、データベースのクエリを試みます。

public async static void CopyDatabase()
    {
        bool isExisting = false;
        try
        {
            StorageFile storage = await ApplicationData.Current.LocalFolder.GetFileAsync("dbname.db");
            isExisting = true;
        }
        catch (Exception ex)
        {
            isExisting = false;
        }
        if (!isExisting)
        {
            StorageFile databaseFile = await Package.Current.InstalledLocation.GetFileAsync("dbname.db");
            await databaseFile.CopyAsync(ApplicationData.Current.LocalFolder);

        }

    }

コピーがいつ終了したかを知るにはどうすればよいですか? 私は何を間違っていますか?

4

1 に答える 1

7

問題はこのメソッドのコードではなく、呼び出し方にあると思います。

メソッドの宣言を次のように変更します。

public async static Task CopyDatabase()

そして、次を使用して呼び出します。

await CopyDatabase();

これにより、次のコード行 (おそらくデータベースを開こうとする) が実行される前にコピーが完了することが保証されます。

于 2012-10-08T14:18:24.173 に答える