Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 来自流异步的Windows RT应用程序更新进度条_C#_Asynchronous_Windows Applications - Fatal编程技术网

C# 来自流异步的Windows RT应用程序更新进度条

C# 来自流异步的Windows RT应用程序更新进度条,c#,asynchronous,windows-applications,C#,Asynchronous,Windows Applications,编辑:链接的“同一个问题”似乎适用于常规的windows窗体应用程序,而不是具有有限的.NET库的windows RT 我正在开发一个Windows应用程序,该应用程序能够将zip文件上传到服务器上,并具有进度。我正在使用一个自定义的流类来处理进度更新。流类如下所示(代码段): ProgressBar将its值绑定到我正在更新的subgressvalue属性。我的问题是,我可以通过Debug.Writeline在控制台中看到流的读取速度非常快,并且每秒可以得到多次非常快的更新,例如: 0.008

编辑:链接的“同一个问题”似乎适用于常规的windows窗体应用程序,而不是具有有限的.NET库的windows RT

我正在开发一个Windows应用程序,该应用程序能够将zip文件上传到服务器上,并具有进度。我正在使用一个自定义的
类来处理进度更新。流类如下所示(代码段):

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...