我想在一个事件中执行一段代码,如果这段代码执行时间太长,界面就不能很快刷新,我通过线程就可以实现了,可是如果我的窗体上有一个ListBox控件,我想将线程进行到那一步显示在这个ListBox控件上,那么只能通过定义这个控件的一个指针变量来实现,可是如果在这个线程中有连接数据库的操作或循环等待等命令就会出现错误(编译通过),好像只有通过发送消息才可以实现,那么怎么来定义这样的消息,使得当这个事件执行到某一步的是否,给窗体发一个消息,这个消息触动一个事件,让这个事件来往ListBox里面写一个字符串,能否给一个简单的例子?
谢谢帮助![email protected]
谢谢帮助![email protected]
解决方案 »
- 计算器的退格键要怎么实现
- WIN SDK下, 窗口按钮无法显示的问题.
- 在 nt service 中,如何捕获 POWER 的消息?
- 怎么把刷子的特性赋给一把新的刷子
- 请教下拉列表框的问题
- 一个WIN32的程序编译时出错,为什么?困惑
- 如何知道主板上串口的个数和使用情况,哪个API函数中有这样的功能?
- CTreeView控件响应右键单击怎么知道单击的是哪个条目
- ???请问,我用ATL做了一个COM组件,在VB和ASP中都调用成功,为何在客户端VBScript脚本中却调用失败???
- 使用CSocket为什么会陷入缓慢等待中?
- 在单文档视图的工程中增加一个对话框后,如何在新增对话框的事件中调用文档类的数据?
- delphi编写的窗口dll如何调用
线程:
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.映射消息响应函数。
3.在工作者线程内发消息(SendMessage or PostMessage),主线程的响应函数会有响应。
::SendMessage(hWndListBox, LB_ADDSTRING, 0, (LPARAM)"your string");
CoInitialize(NULL);
线程中直接访问界面组件大多数时候没有问题的,不过最好最以下同步。
{
HWND *hwnd=(HWND *)pParam;
::PostMessage(*hwnd,WM_COMMNOFITY,0,EV_RXCHAR);
}
:那我在线程中是不是这样发送消息就可以了?
这样做好像会出错!
是不是这里用问题?