代码如下:'接收文件信息的接收回调
Private Sub FileInfoCallBack(ByVal ar As IAsyncResult)
    Link = CType(ar.AsyncState, Socket)
    Dim Buff As Integer = Link.EndReceive(ar)            '过度到连接成功的套接字用
    SaveFileDialog1.DialogShow(Me)
End Sub用F10单步调试,代码确实执行了这一步,如果用SaveFileDialog1.DialogShow(Me),程序就会死机,如果用SaveFileDialog1.DialogShow(),程序不会死,但对话框看不到用下列代码没有问题:
Private Sub CFrmClient_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    SaveFileDialog1.DialogShow()
End Sub因为FileInfoCallBack是个回调函数,是不是回调函数不准显示这种对话框?

解决方案 »

  1.   

    SaveFileDialog1.DialogShow()
    有这个方法吗?应该是ShowDialog()吧?
      

  2.   

    Private Sub Button2_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button2.Click
       ' Displays a SaveFileDialog so the user can save the Image
       ' assigned to Button2.
       Dim saveFileDialog1 As New SaveFileDialog()
       saveFileDialog1.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif"
       saveFileDialog1.Title = "Save an Image File"
       saveFileDialog1.ShowDialog()
       
       ' If the file name is not an empty string open it for saving.
       If saveFileDialog1.FileName <> "" Then
          ' Saves the Image via a FileStream created by the OpenFile method.
          Dim fs As System.IO.FileStream = Ctype _
             (saveFileDialog1.OpenFile(), System.IO.FileStream)
          ' Saves the Image in the appropriate ImageFormat based upon the
          ' file type selected in the dialog box.
          ' NOTE that the FilterIndex property is one-based.
          Select Case saveFileDialog1.FilterIndex
             Case 1
                Me.button2.Image.Save(fs, _
                   System.Drawing.Imaging.ImageFormat.Jpeg)         Case 2
                Me.button2.Image.Save(fs, _
                   System.Drawing.Imaging.ImageFormat.Bmp)         Case 3
                Me.button2.Image.Save(fs, _
                   System.Drawing.Imaging.ImageFormat.Gif)
           End Select       fs.Close()
        End If
    End Sub
      

  3.   

    呵呵,多线程~~~自己做个事件去触发主窗体的Dialog的Show方法以前做的程序里好像有代码,你先自己试试,不行明天贴代码给你:)
      

  4.   

    纠正一下,是ShowDialog()方法
    楼上的高手,如何“触发主窗体的Show方法”?我这个已经是主窗体了呀
      

  5.   

    boytomato(深爱一人叫颖的女孩!),你那个单线程的不会有问题,就跟我的LOAD事件一样
      

  6.   

    用Invoke来调用主窗体的方法public delegate void ClearextHandlder();
    //预先定义委托
    state.rtxtRunLog.Invoke((new ClearextHandlder(state.rtxtRunLog.Clear)));
    //通过委托调用主窗体的方法,其中
    //state是Form的实例
    //rtxtRunLog是Form中的控件