winforms 使用FileStream发出阅读回车

a14dhokn  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(85)

我在Windows窗体VB.NET程序中遇到一个问题,当阅读回车时,但仅在第二次读取之后。
我已经创建了一个全新的项目,只关注使程序冻结的部分,它的行为是相同的。
这是相当容易在你的身边重新创建(或不,如果它与我的设置.).

  • 新建Windows窗体VB.NET(6.0)项目
  • 添加文本框并使其多行
  • 添加一个按钮并将下面的代码粘贴到处理单击的方法下
  • 在bin中创建一个“first.txt”文件,其中包含一个字母、一个回车符和另一个字母

文件示例:

A
B

字符串
相关代码:

Using fichier As FileStream = New FileStream("first.txt", FileMode.OpenOrCreate)
    If fichier.CanRead() Then
        Dim contenu(100) As Byte

        fichier.Position = 0

        fichier.Read(contenu, 0, 100)

        TextBox1.Text = String.Empty

        Try
            For Each lettre As Byte In contenu
                TextBox1.Text += Chr(lettre)
            Next
        Catch ex As Exception

        End Try
    End If
End Using


第一次点击按钮的作品,你会得到什么在下面的文本框:
第一个月
第二次点击按钮会使程序冻结。当我一步一步执行时,它发生在Chr(13)被添加到TextBox1.Text时。没有异常出现。
我从2013年的培训PDF从一个网站,因为我无法找到更好的。所以我很确定有一个更好的方式来读取文件,这不是我感兴趣的在这里。
我真的很想知道这段代码到底发生了什么,特别是它第一次运行的很好。
我找不到类似的帖子,我也不擅长使用诊断工具来自己解决问题。
谢谢你的帮助
L

oknwwptz

oknwwptz1#

如果控件的属性被快速更改,则将控件当作变量使用可能会导致性能问题-例如,仅更改其.Text属性中的一个字符就意味着需要重新呈现该控件。
相反,最好单独进行密集工作,然后只对控件进行一次更改,因此,对于问题中的代码,而不是:

For Each lettre As Byte In contenu
    TextBox1.Text += Chr(lettre)
Next

字符串
你可以做:

Dim sb As New StringBuilder()
For Each b In contenu
    sb.Append(Chr(b))
Next

TextBox1.Text = sb.ToString()


当需要连接的项目超过6-10个时,使用StringBuilder通常比连接字符串更好。

相关问题