C# 后台 worker 划分

标签 c# visual-studio-2010 backgroundworker

我正在尝试使用一个后台 worker ,它为字典中的每个键将内容保存到文件中。 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++;
        }
    }

我希望它通过提供它所在的 key /总 key * 100 百分比来报告进度,但这没有用。

不管我用什么类型的pctg; short、int、float、double、num/Len 始终 = 0,但如果我将其调换,Len/num 会给出正确的值。添加或删除括号不会改变任何内容。我是不是太傻了,漏掉了什么,还是我写错了什么?

这是一些来自 VS2010(专业版)的截图

pctg 为双: pctg as double

pctg 为 float : pctg as float

pctg 为 double,没有括号: pctg as double, without brackets

交换了 Len 和 num 的 pctg: pctg with Len and num swapped

最佳答案

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

尝试:

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

如果 numLen 都是整数,那么您的代码将执行整数除法,然后将该整数转换为 float 。

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

关于C# 后台 worker 划分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20554935/

相关文章:

c# - 在文本框中检查所需信息的最佳方法是什么?

c# - PerformanceCounter CPU 使用率值始终为 0

c# - 动态 SQL 语句的新手

c# - 从文本文件中读取行跳过读取行

c# - WriteFile 返回错误代码 87

c# - 在 .Net dll 中嵌入 git commit hash

asp.net - "object reference not set"在 Visual Studio 2010 中的 asp.net default.aspx 文件的设计 View 中显示

c# - T4 模板调试器在包含多个 TT 文件时显示不正确的行

c# - 请帮助我使这段代码线程安全

c# - 使用Ping映射事件IP的线程问题-C#