Do Loop 导致应用程序冻结

Do Loop causes application freezing

我必须生成一个等间距的数字序列。我有下限、上限和从一个到另一个的步骤。为此,我写了一个 Do-Loop 子句。如果我尝试使用很少的数字作为输出(提供的代码中的 y-case)来执行此操作,它工作正常,但是当数字更多时(下面代码中的 z-case),我的软件会冻结。这是我在 VS2019 中提供的代码:

    Dim y As Double = DataGridView2.Rows(0).Cells(2).Value
    Dim z As Double = DataGridView2.Rows(0).Cells(4).Value
    Do
        ListBox8.Items.Add(y)
        y += CDbl(Form1.TextBox2.Text)
    Loop Until y = DataGridView2.Rows(0).Cells(3).Value
    ListBox8.Items.Add(y)
    Do
        ListBox9.Items.Add(z)
        z += CDbl(Form1.TextBox2.Text)
    Loop Until z = DataGridView2.Rows(0).Cells(5).Value
    ListBox9.Items.Add(z)

对于我正在尝试工作的情况,y-case 有 4 个数字作为输出,而 z-case 应该提供 61 个数字作为输出。我该如何解决这个问题? 谢谢大家会回答我。

此致

您应该避免在循环中操作 GUI。这是非常低效的。您应该创建一个 Integer 列表并将此列表绑定到您的 DataGridView 或 ListBox 或其他任何东西。

试试这样的东西:

List<Double> data = new List<Double>():
data.Add(1.0); // add as many as you want
listbox.DataSource=data

在网上查找数据绑定示例。我现在在用手机。如果不成功请告诉我,我会提供工作代码。

您可能永远不会处于 z 正好等于 gridview 单元格中的值的位置。这是因为浮点舍入误差。因此应该是:

Loop Until Math.Abs(z - target) < epsilon

目标是您的单元格内容。 epsilon 是一个小数字,例如 0.001。

您最多可以将其更改为:

While z <= DataGridView2.Rows(0).Cells(5).Value
    ListBox9.Items.Add(z)
    z += CDbl(Form1.TextBox2.Text)
End While

这样它就不会陷入寻找完全匹配的无限循环。