0

实际上我正在创建 Windows Phone 8 应用程序。

所以我的应用程序最初需要在应用程序启动之前从服务器下载一些文件(这意味着在应用程序启动之前)。所以我想显示启动屏幕,直到文件从服务器下载到我的本地应用程序。,

我有一个下载文件的代码,我成功地知道如何下载,就像在 WP8 中单击按钮一样,

但我不知道如何在应用程序启动之前自动下载文件。,

我已经在 App.xaml.cs 文件和“void Application_Launching(object sender,LaunchingEventArgs e)”方法中编写了下载方法来初始下载文件。,

但我的问题是启动画面通常会显示超过 2 或 3 秒,并且在我的下载完成之前我的主页已显示给用户。,

这是我在 App.xaml.cs 中下载的代码

      private void Application_Launching(object sender, LaunchingEventArgs e)
    {
        downloadDBFile();
    }
    public enum DownloadStatus { Ok, Error, fileExist };

    public static async Task<DownloadStatus> DownloadFileSimle(Uri fileAdress, string fileName)
    {
        try
        {
            WebRequest request = WebRequest.Create(fileAdress);
            if (request != null)
            {
                WebResponse response2 = await request.GetResponseAsync();
                using (Stream resopnse = response2.GetResponseStream())
                {
                    using (IsolatedStorageFile ISF = IsolatedStorageFile.GetUserStoreForApplication())
                    {
                        if (ISF.FileExists(fileName))
                            ISF.DeleteFile(fileName);
                        using (IsolatedStorageFileStream file = ISF.CreateFile(fileName))
                        {
                            const int BUFFER_SIZE = 10 * 1024;
                            byte[] buf = new byte[BUFFER_SIZE];

                            int bytesread = 0;
                            while ((bytesread = await resopnse.ReadAsync(buf, 0, BUFFER_SIZE)) > 0)
                                file.Write(buf, 0, bytesread);
                        }
                    }
                    return DownloadStatus.Ok;
                }
            }
            return DownloadStatus.Error;
        }
        catch { return DownloadStatus.Error; }
    }
    public async void downloadDBFile()
    {
        DownloadStatus fileDownloaded = await DownloadFileSimle(new Uri(@"https://dl.dropboxusercontent.com/s/nz9107khswqttyp/sample.sqlite?dl=1&token_hash=AAE7EOhKzpVlAbCUlgwToURZOg0xZzMesu_gPTcLceZzDg", UriKind.Absolute), "sample.sqlite");
        switch (fileDownloaded)
        {
            case DownloadStatus.Ok:
                MessageBox.Show(fileDownloaded.ToString());
                break;
            case DownloadStatus.Error:
                MessageBox.Show(fileDownloaded.ToString());
                break;
            case DownloadStatus.fileExist:
                MessageBox.Show(fileDownloaded.ToString());
                break;
            default:
                MessageBox.Show("There was an error while downloading.");
                break;
        }
    }

所以我的问题是:

1)在我的应用程序显示给用户之前,在 App.xaml.cs 文件中编写代码以从服务器下载文件是正确的方法吗?

2)如果它是赖特的方式意味着“如何延长启动画面的时间,直到我的文件被下载并且在我的应用程序被显示给用户之前”

有人请帮我解决.,

提前致谢。,

4

1 回答 1

2

对此最好的建议是,您需要为扩展启动画面创建一个单独的页面,其中在下载数据库时显示带有动画的启动画面发生在另一个线程中。

扩展启动画面是这两个问题的答案。

在 App.xaml.cs 中下载文件会导致应用程序冻结,使用户除了杀死之外别无他法,而且它也可能不符合应用程序认证的条件。

于 2014-03-01T17:51:50.630 回答