我有一个按钮,现在调用我的后台工作人员(BackgroundWorker1),这个工作正常,在我的backgroundworker_DoWork处理程序中,它有一个while循环比较2个数字,第一个数字是0,第二个数字是255.现在,我也是有一个progresschaged处理程序,它应该在调用时更新我的ListView,但后台工作程序只运行循环3次。代码可以在下面找到:
Private Sub BackgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Dim worker As System.ComponentModel.BackgroundWorker = DirectCast(sender, System.ComponentModel.BackgroundWorker)
While startIP(1) < endIP(1) ''ONLY RUNS 3 TIMES?
test = test + 1
worker.ReportProgress(0, "Check")
startIP(1) = startIP(1) + 1
End While
End Sub
Private Sub BackgroundWorker1_ProgressChanged(sender As Object, e As ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
MetroListView1.Items.Add(startIP(0) & "." & startIP(1) & "." & startIP(2) & "." & startIP(3))
MetroListView1.Refresh()
End Sub
Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
MessageBox.Show("Closed.")
End Sub
我已经检查过2个变量是否有值,他们确实如此。在循环停止并运行RunWorkerCompleted处理程序之前,StartIP达到3。我真的很困惑为什么这样做。任何帮助表示赞赏。
感谢。
答案 0 :(得分:1)
我真的不知道有多少人因为Option Strict Off这件事而倒下了
在您的项目中,此选项设置为Off,这意味着您的编译器允许仅包含数字的字符串被处理,因为它们是数字。
但是在比较两个字符串时,情况并非如此。
在字符串“3”和字符串“255”之间的比较中,较小的一个是“255”而不是“3”,因为“255”中的第一个字符按字母顺序小于第一个(和唯一的)字符“ 3" 。因此,当第一个字符串达到值3时,循环结束。
这是一个使用Option Strict Off
运行的示例Sub Main
Dim i As String = "0"
Dim e As String = "255"
While i < e
i = i + 1
Console.WriteLine(i)
End While
' Exits when i = "3"
End Sub
您应该将两个数组(startIP和endIP)声明为两个整数数组,并对不在字符串上的数字执行数学运算。另外,我建议您避免在项目属性中将Option Strict设置为On的问题