我有一个长期运行的WCF服务和一个通过WPF使用它的客户端。使用进度条通知客户端特定进程的完成百分比(WCF中的方法:我需要能够根据服务中的循环计数器显示百分比)
我使用后台工作程序来显示进度百分比,但它没有正确显示进度。 (仅显示0和100而不是值之间)在DEBUG模式下一切正常,但在RELEASE模式下不能正常工作! (进度条在DEBUG模式下按顺序更新)
我尝试使用callbacks / wsDualHttpBinding,但在为所有客户端合并时遇到了一些困难。所以,不得不放弃这个选项。
使用async / await
我搜索了很多链接,但没有任何问题可以解决我的问题。
请指导我如何从WCF服务尚未完成的方法中获取当前/运行值,以便我可以根据此值填充进度条百分比。 (在值之间)
P.S:WCF服务使用wsHttpBinding
以下示例代码:
File "<ipython-input-138-432bd722fae9>", line 6
for element in list_ if element['selected']:
^
SyntaxError: invalid syntax
答案 0 :(得分:0)
了解如何实施。这是我工作代码的一部分。 .xaml文件:
private async void btnCompare_Click(object sender, RoutedEventArgs e)
{
ProgressBarCompare.Value = 0;
lblCompare.Content = "";
List<string> list1= (List<string>)Application.Current.Properties["list1"];
List<string> list2= (List<string>)Application.Current.Properties["list2"];
List<Result> output = new List<Result>();
List<Result> passed = new List<Result>();
int topCount = emailList.Count;
int currentItem = 0;
int topBound = topCount - 1;
while (currentItem < topCount)
{
var hash = await CheckOperation(list1[currentItem]); // this line perform progress bar to be filled
var result = list2.Contains(hash);
//some operations
if (Convert.ToInt32(Math.Ceiling(100d * currentItem / topBound)) < 51)
{
Style style = this.FindResource("LabelTemplateNotFilled") as Style;
lblCompare.Style = style;
}
else
{
Style style = this.FindResource("LabelTemplateFilled") as Style;
lblCompare.Style = style;
}
ProgressBarCompare.Value = Convert.ToInt32(Math.Ceiling(100d * currentItem / topBound));
lblCompare.Content = Convert.ToInt32(Math.Ceiling(100d * currentItem / topBound)) + "%";
currentItem++;
}
lblCompare.Content = "COMPLETE";
}
进程功能:
private async Task<string> CheckOperation(string input)
{
var result = "";
await Task.Run(() =>
{
//perform some code
});
return result;
}
和核心功能:
id = Convert.ToInt32( cmd1.ExecuteScalar());