C#Backgroundworker部门

时间:2013-12-12 21:46:52

标签: c# visual-studio-2010 backgroundworker

我正在尝试使用后台工作程序,它将字典中的每个键保存到文件中。 ACon是一个个人类,可以对其中的字典内容调用保存功能。

   private void bwSaver_DoWork(object sender, DoWorkEventArgs e)
    {
        string[] Keys = ACon.GetKeys();
        int num = 0;

        foreach (string s in Keys)
        {
            ACon.Save(s);
            int Len = Keys.Length;
            double pctg = (num / Len);

            //Below was by first attempt at getting the percentage. Above are my debugging attempts.
            bwSaver.ReportProgress(num/Keys.Length*100);
            num++;
        }
    }

我希望它能够通过给出关键字/ /总密钥* 100来报告进度,但这不起作用。

无论我使用什么类型的pctg; short,int,float,double, num / Len always = 0,但是如果我将其切换, Len / num 会给出正确的值。添加或删除括号不会改变任何内容。我只是愚蠢而且缺少某些东西或者我编码错了吗?

以下是VS2010(专业版)的一些截图

pctg as double: pctg as double

pctg as float: pctg as float

pctg为double,不带括号: pctg as double, without brackets

pctg与Len和num交换: pctg with Len and num swapped

1 个答案:

答案 0 :(得分:2)

它不是你要改变pctg的类型,它基于num和Len的类型

尝试:

float pctg = ((float)num / (float)Len);

如果numLen都是整数,那么您的代码将执行整数除法,之后它会将该整数转换为浮点数。

如下面的@CDspace所述,整数除法将舍入到最接近的int,在您的情况下为零。然后将零转换为任何其他类型仍为零。