我在客户端用一个winsock每5秒向服务器发数据,但如果我弹出一个msgbox对话框时,winsock会停止向服务器发数据,因此会自动断开,怎样让我在弹出对话框时间较长时,也能保证发数据呢?

解决方案 »

  1.   

    自己做个窗体来实现msgbox,不用系统自带的。
      

  2.   

    告诉你一个简单的办法.
    你自己做一个Msgbox的对话框.
    每次调用都用非模态调用就行了,
    楼下.还有更的的办法吗?
    我想不出来了....
      

  3.   

    显示这个自己做的msgbox窗体的时候,把其他窗体隐藏或设置为不可用,也可起到模态的效果。
      

  4.   

    是对话框停止了定时器的运行吗?如果是,用以下方法可以实现
    Private Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
    Private Declare Function SetDlgItemText Lib "user32" Alias "SetDlgItemTextA" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal lpString As String) As Long
    Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
    Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
    Private Const WH_CBT = 5
    Private Const HCBT_ACTIVATE = 5
    Private hHook     As Long  Private Function HookProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
          If nCode = HCBT_ACTIVATE Then
                      'HCBT_ACTIVATE时wParam是将被激活的窗口的句柄
                      Dim hwnd     As Long
                      hwnd = wParam
                      '设定按钮的文字
                      SetDlgItemText hwnd, vbOK, ByVal "确定[&O]"
                      SetDlgItemText hwnd, vbCancel, ByVal "取消[&C]"
                      SetDlgItemText hwnd, vbYes, ByVal "是[&Y]"
                      SetDlgItemText hwnd, vbNo, ByVal "否[&N]"
                      SetDlgItemText hwnd, vbAbort, ByVal "放弃[&A]"
                      SetDlgItemText hwnd, vbIgnore, ByVal "忽略[&I]"
                      SetDlgItemText hwnd, vbRetry, ByVal "重试[&R]"
                      '不要再Hook,以免带来不必要的麻烦
                      UnhookWindowsHookEx hHook
          End If
          HookProc = 0
      End Function
      
      '使用和VB的MsgBox一样的名字,如果你不想使用自定文字格式,只需要移除本模块即可
      Public Function MsgBoxEx(ByVal hwnd As Long, ByVal Prompt As String, _
                                    Optional ByVal Button As VbMsgBoxStyle = vbOKOnly, Optional ByVal Title As String) As VbMsgBoxResult
                                    
              If Len(Title) = 0 Then Title = App.Title
              hHook = SetWindowsHookEx(WH_CBT, AddressOf HookProc, App.hInstance, App.ThreadID)
              '注意下面的第一个参数最好传递一个窗口的句柄,当然,让它作为0也可以
              'MsgBox=   MessageBox(0,   Prompt,   Title,   Button)   '不推荐这样做
              MsgBoxEx = MessageBox(hwnd, Prompt, Title, Button)
      End Function