C# 多线程报告进度不工作

C# 多线程报告进度不工作,c#,.net,winforms,multithreading,backgroundworker,C#,.net,Winforms,Multithreading,Backgroundworker,我最近开始使用多线程Winform应用程序,遇到了一个我不理解的问题 基本上,当我试图让背景工作人员报告其进度时,该进度来自计算,它总是为零 //making background worker BackgroundWorker myJanitor = new BackgroundWorker(); myJanitor.WorkerSupportsCancellation = true; myJanitor.WorkerReportsProgres

我最近开始使用多线程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),但结果总是零

//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分钟,它才允许我:)哦-我不记得了:)谢谢。快乐编码。