繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM