计算循环C中的迭代次数

问题描述:

用于发送短信的winform应用程序。有一个for循环用于批量发送短信。循环在用户单击SEND按钮时开始。我想显示使用LABEL发送给用户的短信号码。任何方式来显示循环的次数或循环继续? 对此有何建议? 在此先感谢! 循环看起来像这样;计算循环C中的迭代次数

for (int x = 0; x < DataGridView.Rows.Count; x++) 
     { 
      string number = ""; 
      number = (DataGridView.Rows[x].Cells["Number"].Value).ToString(); 
      message = MessageBodyRichTextBox.Text; 
      cls.ConnectGSM(Convert.ToInt16(p), number, message);    
     } 
+0

查看BackgroundTask的文档。然后,您可以在循环中“报告进度”,然后更新进度处理程序中的标签。 –

+0

为什么你不能使用循环计数器变量?然后用适当的延迟显示标签? –

+1

http://idownvotedbecau.se/noattempt/ – CalC

for循环有一个内置的反 - 例如:

for(int i=0; i <= maxValue; i++) 
{ 
    // do stuff 

    yourLabel.Text = i.ToString(); 
    yourLabel.Update(); 
} 

也许你指的是一个foreach循环(foreach(var x in y))。 在这种情况下,你需要自己添加一个计数器:

var loopCounter = 0; 
foreach(var x in y) 
{ 
    // do stuff 

    yourLabel.Text = loopCounter.ToString(); 
    yourLabel.Update(); 
    loopCounter++; 
} 
+0

但我的问题是如何根据循环或迭代次数显示进度。更简单地说,我希望标签按照迭代过程以标签更新的方式显示迭代次数。 – Omer

+0

我编辑了我的答案。 –

+0

它的工作原理,但仍然有一个问题。即我在datagridview中有4行,并且当for(int x = 0; x Omer

声明指数成份股之外的for循环,所以你以后可以访问它。

int i = 0; 
for (i = 0 ; i < smsCount ; i++) 
{ 
    //Send SMS 
} 
//You can access i here 

如果您使用的foreach循环

int count = 0; 
foreach (SMS sms in SMSlist) 
{ 
    //Send SMS 
    count++; 
} 

您访问i和外循环计数。如果需要从其他方法或类访问它们,甚至可以在全局范围内声明它们。

var loopcounter=0; 
foreach(var x in y){ 
     loopcounter++; 
     label.text=loopcounter.toString();  
     //delay(); 
} 

您应该在进度处理程序或单独的线程中编写此代码。由于循环的速度比标签可以显示文本的速度快得多。因此,如果你没有延迟直接做到这一点,你可能得不到你想要的效果。

OR

你也可以使用一个Progress Bar显示发送短信的进度。

private void button1_Click(object sender, EventArgs e) 
     { 
      int i; 

      progressBar1.Minimum = 0; 
      progressBar1.Maximum = 200; 

      for (i = 0; i <= 200; i++) 
      { 
       progressBar1.Value = i; 
      } 

     }