C# 来自流异步的Windows RT应用程序更新进度条
编辑:链接的“同一个问题”似乎适用于常规的windows窗体应用程序,而不是具有有限的.NET库的windows RT 我正在开发一个Windows应用程序,该应用程序能够将zip文件上传到服务器上,并具有进度。我正在使用一个自定义的C# 来自流异步的Windows RT应用程序更新进度条,c#,asynchronous,windows-applications,C#,Asynchronous,Windows Applications,编辑:链接的“同一个问题”似乎适用于常规的windows窗体应用程序,而不是具有有限的.NET库的windows RT 我正在开发一个Windows应用程序,该应用程序能够将zip文件上传到服务器上,并具有进度。我正在使用一个自定义的流类来处理进度更新。流类如下所示(代码段): ProgressBar将its值绑定到我正在更新的subgressvalue属性。我的问题是,我可以通过Debug.Writeline在控制台中看到流的读取速度非常快,并且每秒可以得到多次非常快的更新,例如: 0.008
流
类来处理进度更新。流类如下所示(代码段):
ProgressBar
将its值
绑定到我正在更新的subgressvalue
属性。我的问题是,我可以通过Debug.Writeline
在控制台中看到流的读取速度非常快,并且每秒可以得到多次非常快的更新,例如:
0.0086728887868017600
0.1474391093756300
2.3676986387968800
4.5879581682181300
6.8082176976393800
//so on and so forth...
但在整个上传过程中,进度条只更新了2到3次,而且它更新到的值似乎是随机的(但仍然是upload\u ProgressChanged
报告的值之一。我之所以在this.Dispatcher…
中有绑定更新,是因为没有它它就无法工作,导致与尝试从单独线程访问UI相关的崩溃
如何让进度条在保持异步等待
设计的同时,以Debug.WriteLine
所能看到的最快和最频繁的速度更新?如果没有,就无法确定问题出在哪里。但是,您是否尝试过使用秒表
跟踪您提高进度更改的频率d
事件,并将频率降低到合理的程度,如每秒一次,或最多每秒4-5次?如果您用大量更新填充调度程序队列,它可能无法跟上。
//Initialize updateable stream
RTMStreamWithProgress progStream = new RTMStreamWithProgress(zipAsStream);
progStream.ProgressChanged += upload_ProgressChanged;
private async void upload_ProgressChanged(object sender, decimal e)
{
Debug.WriteLine((e * 100).ToString());
await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
HubDataContext globalContext = (HubDataContext) Application.Current.Resources["GlobalDataContext"];
globalContext.SubProgressValue = Convert.ToDouble(e * 100);
});
}
0.0086728887868017600
0.1474391093756300
2.3676986387968800
4.5879581682181300
6.8082176976393800
//so on and so forth...