vb.net的异步读写数据流(使用线程、委托)

本文介绍了在VB.NET中如何使用线程和委托实现异步读写数据流,以避免长时间I/O操作导致程序停滞。通过实例展示了线程的创建和终止,以及委托在多线程环境下的作用,确保主线程能正常响应其他事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在理解异步读写前,了解一下线程和委托是必要的。


一、线程与委托


        1、为什么要用异步?

              无论是MemoryStream,BufferedStream,FileStream数据流,一旦的读写开始,应用程序就会处于停滞状况。

              直到数据读写完成,并返回。

              文件数据的读写基本上是一种非常消耗资源的过程,处理的数据量越大,I/O对系统性能的影响就越明显。

              

             为了避免长时间等待I/O操作使程序处理“瘫痪”状态,异步I/O就显得非常重要。


             异步的实现就是使用一个新的线程来完成,主线程的任务并不影响,这样大大提高了程序的效能。


        2、线程

              每个程序有一个主线程,如果一个循环处于主线程中,程序在较长的循环,将出现“不响应”的情况。


              线程在System.Threading中。线程创建可专用于一个功能块(方法、函数),

                                                                   线程的开始用Start方法

                                                                   线程的结束用Abort方法


            下面感受一下线程作用:


             窗体上添加两Button,两个TextBox,代码如下,点击Button1启动循环,接着点击Button2.   

  1. Public Class Form1  
  2.   
  3.     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click  
  4.         Dim i As Int32  
  5.         For i = 0 To 123451  
  6.             TextBox1.Text = i  
  7.         Next  
  8.     End Sub  
  9.   
  10.     Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click  
  11.         TextBox2.Text = "终于出现奇迹"  
  12.     End Sub  
  13. End Class  
Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim i As Int32
        For i = 0 To 123451
            TextBox1.Text = i
        Next
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        TextBox2.Text = "终于出现奇迹"
    End Sub
End Class

           

            可以明显看到虽然点击了Button1,但TextBox1的内容并没有什么变化,同时,在点击Button2时,TextBox并没有内容显示。

           这是因为线程正被循环一直占用,暂时无法响应Button2,直到循环完成后,它才终于忙过来处理Button2.

           这会给用户造成“程序已经无响应、死了”的误会。





           下面改善上面的做法,新建一个线程来专门处理循环,这样就不影响主线程响应Button2:

  1. Imports System.Threading  
  2. Public Class Form1  
  3.     Dim mythread As Thread  
  4.   
  5.     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click  
  6.         mythread = New Thread(AddressOf ShowNumber) '构造线程  
  7.         mythread.Name = "myShowNumber"  
  8.         mythread.Start() '启动线程  
  9.     End Sub  
  10.   
  11.     Private Sub ShowNumber()  
  12.         Dim i As Int32  
  13.         For i = 0 To 123451  
  14.             TextBox1.Text = i  
  15.       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值