C# 多线程报告进度不工作
我最近开始使用多线程Winform应用程序,遇到了一个我不理解的问题 基本上,当我试图让背景工作人员报告其进度时,该进度来自计算,它总是为零C# 多线程报告进度不工作,c#,.net,winforms,multithreading,backgroundworker,C#,.net,Winforms,Multithreading,Backgroundworker,我最近开始使用多线程Winform应用程序,遇到了一个我不理解的问题 基本上,当我试图让背景工作人员报告其进度时,该进度来自计算,它总是为零 //making background worker BackgroundWorker myJanitor = new BackgroundWorker(); myJanitor.WorkerSupportsCancellation = true; myJanitor.WorkerReportsProgres
//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),但结果总是零
//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();
我错过了什么?如果我用,比如说,一个Random.Next(0100)替换这个计算,那么就称它为updates fine 尝试索引*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。尝试索引*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
[2000/10000]*100)但结果始终为零
C#101适合初学者。实际上更多的编程-在大多数了解变量类型的语言中都是一样的
操作发生在所涉及的最大、最精确的变量类型上
2000(整数)/10000(整数)是整数结果,四舍五入=0
我建议你先乘,然后除。或者在变量或公式中选择不同的变量类型(即,[(float)2000将整个公式转换为使用float)
[2000/10000]*100)但结果始终为零
C#101适合初学者。实际上更多的编程-在大多数了解变量类型的语言中都是一样的
操作发生在所涉及的最大、最精确的变量类型上
2000(整数)/10000(整数)是整数结果,四舍五入=0
我建议您先乘,然后除。或者在变量或公式中选择不同的变量类型(即,.[float)2000将整个公式转换为使用float。好吧,这很简单。谢谢!我不得不等8分钟才让我:)哦-我不记得了:)谢谢。快乐编码。嗯,这很简单。谢谢!我不得不等8分钟,它才允许我:)哦-我不记得了:)谢谢。快乐编码。