如何解决Do Loop 导致应用程序冻结
我必须生成一个彼此等距的数字序列。我有下限,上限和从一个到另一个的步骤。为此,我编写了一个 Do-Loop 子句。如果我尝试使用很少的数字作为输出(提供的代码中的 y 大小写)来执行此操作,它可以正常工作,但是当数字更多时(下面代码中的 z 大小写),我的软件会冻结。这是我在 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。这是非常低效的。您应该创建一个整数列表并将此列表绑定到您的 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
target 是您的单元格内容。 epsilon 是一个很小的数字,例如 0.001。
,您可以将其更改为:
While z <= DataGridView2.Rows(0).Cells(5).Value
ListBox9.Items.Add(z)
z += CDbl(Form1.TextBox2.Text)
End While
这样它就不会陷入寻找精确匹配的无限循环中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。