- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 SQLite-net 编写一个主要针对 Windows Phone 的通用应用程序。
在操作过程中,用户可以选择下载多个文件。在每个文件下载结束时,我需要将数据库中的文件标记为已完成。我正在使用 BackgroundDownloader 来下载文件 - WP8.0 应用程序使用后台传输服务并且效果很好。文件可能很大(大约 200 多 mb,用户内容),我不希望将下载包装在 HttpClient 或 WebClient 中。
但是,除非我在方法中实际设置断点,否则进度回调似乎不适用于等待。
以下是我快速整理的示例应用程序的 list ,用于演示该行为:
型号:
public class Field
{
[PrimaryKey]
[AutoIncrement]
public int Id { get; set; }
public bool Done { get; set; }
}
MainPage 代码隐藏(我在这里创建一个数据库只是为了这个例子的目的!):
private async void Button_Click(object sender, RoutedEventArgs e)
{
using (var db = new SQLiteConnection(Windows.Storage.ApplicationData.Current.LocalFolder.Path + "//Main.db"))
{
db.CreateTable<Field>();
db.Commit();
}
this.DbConnection = new SQLiteAsyncConnection(Windows.Storage.ApplicationData.Current.LocalFolder.Path + "//My.db");
var dl = new BackgroundDownloader();
dl.CostPolicy = BackgroundTransferCostPolicy.Always;
var transferUri = new Uri("http://192.168.1.4/hello.world", UriKind.Absolute);
var folder = await ApplicationData.Current.LocalFolder.CreateFolderAsync(
"Content",
CreationCollisionOption.OpenIfExists);
var localFile = await folder.CreateFileAsync("cheesecakes.file", CreationCollisionOption.ReplaceExisting);
var d = dl.CreateDownload(transferUri, localFile);
d.Priority = BackgroundTransferPriority.High;
var progressCallback = new Progress<DownloadOperation>(this.DownloadProgress);
await d.StartAsync().AsTask(progressCallback);
}
private async void DownloadProgress(DownloadOperation download)
{
Debug.WriteLine("Callback");
if (download.Progress.Status == BackgroundTransferStatus.Completed)
{
var f = new Field();
f.Done = true;
await this.DbConnection.InsertAsync(f);
Debug.WriteLine("DONE");
}
}
如果我在 DownloadProgress 内设置断点,然后按 F5,我会收到两条调试消息,并且我的数据库会收到一条新记录。
但是,如果我只是让代码执行,我永远不会看到打印给我的“DONE”,我的数据库也不会更新。
我尝试将代码包装在一个新任务中:
await Task.Run(
async () =>
{
Debug.WriteLine("taskrun");
.... OTHER CODE FROM ABOVE...
});
但同样,如果我在回调中设置断点,我只会看到“taskrun”。
UPDATE 我其实认为这与检查状态更相关。例如。检查外的语句被执行,但只执行一次,而检查内的任何内容都不会执行。
有什么方法可以在下载完成时强制调用该回调?
最佳答案
private async void DownloadProgress(DownloadOperation download)
{
Debug.WriteLine("Callback");
var value = download.Progress.BytesReceived * 100 download.Progress.TotalBytesToReceive;
new System.Threading.ManualResetEvent(false).WaitOne(1000);
if (download.Progress.Status == BackgroundTransferStatus.Completed )
{
var f = new Field();
f.Done = true;
await this.DbConnection.InsertAsync(f);
Debug.WriteLine("DONE");
}
}
我也有这个问题,我通过休眠 1000 毫秒解决了这个问题,这对我来说非常有效。
关于c# - WinRT DownloadProgress 回调进度状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24720344/
我正在使用 SQLite-net 编写一个主要针对 Windows Phone 的通用应用程序。 在操作过程中,用户可以选择下载多个文件。在每个文件下载结束时,我需要将数据库中的文件标记为已完成。我正
我正在尝试将进度观察添加到 Qt 的 FileDownloader例子。 它可以工作,但不是我想要的方式 - downloadProgress 信号太罕见了! 大约 300 Kb 文件只需两次。 这使
我正在使用 ASIHTTPRequest 将文件本地下载到 iDevice。 我的下载代码如下 ASIHTTPRequest *download = [ASIHTTPRequest requestWi
我是一名优秀的程序员,十分优秀!