从Visual Basic中的文件读取字节数组

时间:2015-08-08 19:25:35

标签: arrays vb.net bytearray

我有一个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的文件和较大的文件中读取数组字节需要很长时间。

请帮助。

感谢您的关注。

1 个答案:

答案 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

此外,您应该在单击按钮时禁用按钮,然后在完成所有处理后重新启用该按钮。

相关问题