大神帮忙看看。vb.net关于从shell获取信息的有关问题

大神帮忙看看。。vb.net关于从shell获取信息的问题!
VB.NET code
<MethodImpl(MethodImplOptions.Synchronized)> _
     Sub CBstream(ByVal s As IAsyncResult)
        Try
            Dim t As MyStreamReader = CType(s.AsyncState, MyStreamReader)
            If t.stream.BaseStream Is Nothing Then
                Exit Sub
            End If
            Dim i As Integer = t.stream.BaseStream.EndRead(s)
            Dim strReceive As String = System.Text.Encoding.Default.GetString(t.bytes, 0, i)
            m_StringFromShell = strReceive

            t.stream.BaseStream.BeginRead(t.bytes, 0, 1024, New AsyncCallback(AddressOf CBstream), t)
        Catch ex As Exception
            MessageBox.Show("CBstream--" & ex.ToString)
        End Try
    End Sub

          m_StringFromShell = strReceive这一句应该有问题,但是我不知道怎么改,出现的问题是我调试的时候m_StringFromShell是有值的,我用一个类方法返回这个m_StringFromShell的时候,在form中调用这个方法,然后在RichTextBox中显示,没有显示出来,有时也会出现信息,显示的是我调用cmd.exe时的信息,我把这个类也贴上来吧,好让大神们帮忙改改Imports System.Threading

Imports System.Runtime.CompilerServices
Imports System.IO

''' <summary>
''' 将Form中发送过来的信息处理,再将处理结果返回给Form
''' </summary>
''' <remarks></remarks>
Public Class StringOfShell

    Private m_StringToShell As String '发送到shell的字符串
    Private m_StringFromShell As String '从shell返回的字符串

    Public Event AddStringToRichTextBox()

    Friend Class MyStreamReader
        Public stream As IO.StreamReader
        Public bytes(1024) As Byte
        Public Sub New()
        End Sub
    End Class

    <MethodImpl(MethodImplOptions.Synchronized)> _
     Sub CBstream(ByVal s As IAsyncResult)
        Try
            Dim t As MyStreamReader = CType(s.AsyncState, MyStreamReader)
            If t.stream.BaseStream Is Nothing Then
                Exit Sub
            End If
            Dim i As Integer = t.stream.BaseStream.EndRead(s)
            Dim strReceive As String = System.Text.Encoding.Default.GetString(t.bytes, 0, i)
            m_StringFromShell = strReceive

            t.stream.BaseStream.BeginRead(t.bytes, 0, 1024, New AsyncCallback(AddressOf CBstream), t)
        Catch ex As Exception
            MessageBox.Show("CBstream--" & ex.ToString)
        End Try
    End Sub



#Region "private viable"
    Dim sw As StreamWriter
    Dim sr As New MyStreamReader
    Dim err As New MyStreamReader
    Dim p As System.Diagnostics.Process = New System.Diagnostics.Process
    Dim psI As New System.Diagnostics.ProcessStartInfo(System.Environment.GetEnvironmentVariable("ComSpec"))
#End Region

    ''' <summary>
    ''' 向shell发送的字符串
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    ''' 

    Public Property StringToShell() As String
        Get
            Return m_StringToShell
        End Get
        Set(ByVal value As String)
            m_StringToShell = value
        End Set
    End Property
    ''' <summary>
    ''' 从shell得到的字符串
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>

    Public Property StringFromShell() As String
        Get
            Return m_StringFromShell
        End Get
        Set(ByVal value As String)
            m_StringFromShell = value
        End Set
    End Property


    ''' <summary>
    ''' 将Form中要执行的语句发送到这里来执行
    ''' </summary>
    ''' <param name="StringToShell"></param>
    ''' <remarks></remarks>
    Public Sub ExecuteStringToShell(ByVal StringToShell As String)
        '这里添加发送给shell执行的语句
        'Shell(m_StringToShell)

        p = New System.Diagnostics.Process
        '"cmd.exe"为nt的命令行程序
        psI = New System.Diagnostics.ProcessStartInfo("cmd.exe")
        psI.UseShellExecute = False
        psI.RedirectStandardInput = True
        psI.RedirectStandardOutput = True
        psI.RedirectStandardError = True
        psI.CreateNoWindow = True
        p.StartInfo = psI


        p.Start()
        sw = p.StandardInput
        sr.stream = p.StandardOutput
        err.stream = p.StandardError
        sw.AutoFlush = True

        sr.stream.BaseStream.BeginRead(sr.bytes, 0, 1024, New AsyncCallback(AddressOf CBstream), sr)
        err.stream.BaseStream.BeginRead(err.bytes, 0, 1024, New AsyncCallback(AddressOf CBstream), err)

        sw.WriteLine(StringToShell)

    End Sub
    ''' <summary>
    ''' 获取shell的信息
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>

    Public Function GetStringFromShell() As String
        Dim StringFromShell As String
        '这里添加从shell中获取的信息,将值放到StringFromShell中

        StringFromShell = m_StringFromShell

        '将进程关闭
        p.Close()
        If Not sw Is Nothing Then
            sw.Close()
        End If
        If Not sr Is Nothing Then
            sr.stream.Close()
        End If
        If Not err Is Nothing Then
            err.stream.Close()
        End If

        Return StringFromShell
    End Function

End Class