[英]Reading byte array from files in Visual Basic
我有一个用于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的文件和更大的文件中读取数组字节。
请帮忙。
感谢您的关注。
当您连接到.Text时,随着文本变大,它将变得越来越慢,因为必须将整个字符串复制出来,附加到(制作一个新的更长的字符串),然后再复制回RichTextBox。
而是使用AppendText()方法:
RichTextBox1.AppendText(BS.ReadByte.ToString("X") & " ")
对于进度,您可以改为直接在循环中实现“计时器”并每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
另外,您应该在单击按钮时禁用它,然后在完成所有处理后重新启用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.