我最近开始使用多线程Winform应用程序,并遇到了一个我不理解的问题。
基本上,当我尝试让后台工作人员报告其进度并且进度来自计算时,它始终为零。
//making background worker
BackgroundWorker myJanitor = new BackgroundWorker();
myJanitor.WorkerSupportsCancellation = true;
myJanitor.WorkerReportsProgress = true;
myJanitor.DoWork += new DoWorkEventHandler(cleanContactList);
myJanitor.ProgressChanged += new ProgressChangedEventHandler(myCleaningWorker_ProgressChanged);
myJanitor.RunWorkerAsync();
'cleanContactList'方法循环遍历DataGridView的行,在此期间我尝试这样的行:
int percentComplete = (myRow.Index / contactGridView.Rows .Count ) * 100;
(sender as BackgroundWorker).ReportProgress(percentComplete);
令人沮丧的是,percentComplete总是为零。如果我调试它,我可以看到有一个实际的计算发生(例如[2000/10000] * 100),但结果总是为零。
我在这里缺少什么?如果我用一个Random.Next(0,100)调用替换计算,它会更新。
答案 0 :(得分:1)
尝试索引* 100 /计数。我认为你将两个整数除以0,然后乘以100。
例如,这个:
int index = 50;
int count = 100;
int percent = index/count * 100;
int percent2 = index * 100/count;
Console.WriteLine("{0} & {1}", percent, percent2);
输出0& 50。
答案 1 :(得分:0)
[2000/10000] * 100)但结果始终为零
C#101适合初学者。实际上更多的编程 - 在大多数知道变量类型的语言中都是一样的。
操作发生在所涉及的大多数precice变量类型上。
2000(整数)/ 10000(整数)是整数结果四舍五入= 0
我建议你先繁殖,然后分开。或者在变量或公式中选择不同的变量类型(即[(float)2000将整个公式转换为使用浮点数。