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 回答