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
这样它就不会陷入寻找完全匹配的无限循环。
我必须生成一个等间距的数字序列。我有下限、上限和从一个到另一个的步骤。为此,我写了一个 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
这样它就不会陷入寻找完全匹配的无限循环。