微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Do Loop 导致应用程序冻结

如何解决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 举报,一经查实,本站将立刻删除。