我有一个Visual Basic编程语言代码,它从文件中读取字节数组,我使用该代码:
Imports System.IO
Imports System.Threading
Public Class Form1
Dim thread As New Thread(AddressOf RW_EXE)
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
With OpenFileDialog1
If .ShowDialog() = Windows.Forms.DialogResult.OK Then
thread.IsBackground = True
Control.CheckForIllegalCrossThreadCalls = False
thread.Start()
End If
End With
End Sub
Sub RW_EXE()
RichTextBox1.Text = ""
Dim FS As New FileStream(OpenFileDialog1.FileName, FileMode.Open, FileAccess.Read)
Dim BS As New BinaryReader(FS)
Dim x As Integer = BS.BaseStream.Position
Dim y As Integer = BS.BaseStream.Length
Dim s As String = ""
ProgressBar3.Maximum = y
While x < y
RichTextBox1.Text &= BS.ReadByte.ToString("X") & " "
ProgressBar3.Value = x
x += 10
End While
RichTextBox1.Text = s
FS.Close()
BS.Close()
thread.Abort()
End Sub
该代码的功能很好,但是我有一个问题,它很慢,从大小为100 KB的文件和较大的文件中读取数组字节需要很长时间。
请帮助。
感谢您的关注。
答案 0 :(得分:3)
当你连接到.Text时,随着文本变大,它会越来越慢,因为整个字符串必须被复制出来,附加到(制作一个新的更长的字符串),然后复制回RichTextBox。 / p>
而是使用AppendText()方法:
RichTextBox1.AppendText(BS.ReadByte.ToString("X") & " ")
对于进度,您可以改为实现&#34;计时器&#34;直接进入循环并每隔xxx毫秒更新一次:
Dim sw As New Stopwatch
sw.Start()
While x < y
RichTextBox1.AppendText(BS.ReadByte.ToString("X") & " ")
If sw.ElapsedMilliseconds > 500 Then
ProgressBar3.Value = x
sw.Restart()
End If
x += 10
End While
此外,您应该在单击按钮时禁用按钮,然后在完成所有处理后重新启用该按钮。