VB.net后台工作程序在循环结束前关闭

时间:2018-04-13 11:34:38

标签: vb.net backgroundworker

我有一个按钮,现在调用我的后台工作人员(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。我真的很困惑为什么这样做。任何帮助表示赞赏。

感谢。

1 个答案:

答案 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的问题