我想在一个事件中执行一段代码,如果这段代码执行时间太长,界面就不能很快刷新,我通过线程就可以实现了,可是如果我的窗体上有一个ListBox控件,我想将线程进行到那一步显示在这个ListBox控件上,那么只能通过定义这个控件的一个指针变量来实现,可是如果在这个线程中有连接数据库的操作或循环等待等命令就会出现错误(编译通过),好像只有通过发送消息才可以实现,那么怎么来定义这样的消息,使得当这个事件执行到某一步的是否,给窗体发一个消息,这个消息触动一个事件,让这个事件来往ListBox里面写一个字符串,能否给一个简单的例子?
谢谢帮助![email protected]

解决方案 »

  1.   

    比如:
    线程:
    UINT country_show_threadproc(LPVOID param)       //
    {
            当执行到某一步的是否发消息给自己定义的一个事件
            让这个事件list_country_result->InsertString(0,"检查重复的情况...");
    }
    一个事件:
    void CCountryCheck::OnOK() 
    {
    // TODO: Add extra validation here
             在这里调用一个线程
             HWND hWnd=GetSafeHwnd();
    AfxBeginThread(country_show_threadproc,hWnd);
    }
      

  2.   

    1.自定义一消息。
    2.映射消息响应函数。
    3.在工作者线程内发消息(SendMessage or PostMessage),主线程的响应函数会有响应。
      

  3.   

    1 首先定义消息:例如 define WM_MYMESSAGE (WM_USER+100) 2 在.H文件中,加入消息响应函数,如:         LONG OnMyMessage(WPARAM w,LPARAM l);     该函数有规定的格式:         LONG Function_Name(WPARAM w,LPARAM l); 3 加入消息响应宏,在响应该消息的类中,在消息响应块中,     BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)         //{{AFX_MSG_MAP(CAboutDlg)             // No message handlers         //}}AFX_MSG_MAP     END_MESSAGE_MAP()     加入以下语句:ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)     成为如下样式:     BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)         //{{AFX_MSG_MAP(CAboutDlg)         ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)         //}}AFX_MSG_MAP     END_MESSAGE_MAP() 4 在.CPP文件中,编辑消息响应函数,如下:     LONG CMyClass::OnMyMessage(WPARAM w,LPARAM l)     {     } 
      

  4.   

    把listbox的句柄传递到线程中,然后就可以用发送消息的方式处理了
    ::SendMessage(hWndListBox, LB_ADDSTRING, 0, (LPARAM)"your string");
      

  5.   

    线程中调用数据库连接组件会出错,最可能的原因没有初始化com组件.
    CoInitialize(NULL);
    线程中直接访问界面组件大多数时候没有问题的,不过最好最以下同步。
      

  6.   

    UINT country_show_threadproc(LPVOID pParam)       //

        HWND *hwnd=(HWND *)pParam;
        ::PostMessage(*hwnd,WM_COMMNOFITY,0,EV_RXCHAR);
    }
    :那我在线程中是不是这样发送消息就可以了?
    这样做好像会出错!
      

  7.   

    HWND *hwnd=(HWND *)pParam;
    是不是这里用问题?
      

  8.   

    把ListBox的句柄给线程,然后给ListBox发信息就可以了