SOUI 多线程界面更新问题

从接触soui 到项目的基本功能开发完毕,大概有一个月的时间。SOUI基本介绍http://www.cnblogs.com/setoutsoft/p/3903677.html,所以的界面均通过xml布局实现,类似android 。

在开发到一般的时候,遇到最头疼的问题是在子线程中收到消息,更新UI崩溃问题,没有接触过windows 编程,困惑两天之后,终于在SOUI使用者热心的指导下,才明白windows 桌面开发,子线程是不能更新UI的,必须在主线程中。

借用网友L.K的伪代码,简单的描述SOUI中多线程更新界面界面

char *p = new char[32];
BOOL bResult = PostMessage(m_pMainDlg->m_hWnd, WM_USER + 0X1001, (WPARAM)p, NULL);
if(!bResult)
{
  delete [] p;
  p = NULL;
}
onMessage(UINT wMsg, WPARAM wParam, LPARAM lParam){
  char* p = (char*)wParam;
  //这里插入更新soui界面的代码
  delete [] p;
  p = NULL;
}

非常感谢SOUI 作者辛苦劳作,祝愿SOUI越来越完善,功能越来越强大。

时间: 2024-10-12 21:05:17

SOUI 多线程界面更新问题的相关文章

WPF多线程UI更新——两种方法

WPF多线程UI更新--两种方法 前言 在WPF中,在使用多线程在后台进行计算限制的异步操作的时候,如果在后台线程中对UI进行了修改,则会出现一个错误:(调用线程无法访问此对象,因为另一个线程拥有该对象.)这是很常见的一个错误,一不小心就会有这个现象.在WPF中,如果不是用多线程的话,例如单线程应用程序,就是说代码一路过去都在GUI线程运行,可以随意更新任何东西,包括UI对象.但是使用多线程来更新UI就可能会出现以上所说问题,怎么解决?本文章提供两个方法:Dispatcher(大部分人使用),T

windows程序消息机制(Winform界面更新有关)

windows程序消息机制(Winform界面更新有关) 转自:http://www.cnblogs.com/blosaa/archive/2013/05/31/3109586.html 1. Windows程序消息机制 Windows GUI程序是基于消息机制的,有个主线程维护着消息泵.这个消息泵让windows程序生生不息. Windows程序有个消息队列,窗体上的所有消息是这个队列里面消息的最主要来源.这里的While循环使用了GetMessage() 这个方法,这是个阻塞方法,也就是队列

Sprint 5 summary: UI 界面更新,Azure端部署和用户反馈分析 12/28/2015

本次sprint主要完成的任务有对手机APP的UI界面的更新,同时对Azure客户端的部署进行了相应的学习和有关的程序设计.同时对于ALPHA release的用户反馈做出相应的分析以确定接下来工作的重点. 工作进度: 1. UI 的界面更新和完善工作主要由兆阳负责,主要是对APP中的自动标签和浏览布局进行了相应的改进.其中大部分与Sprint2中的界面有所区别,并且对整体的APP工作性能有了一些改善.相应的改进feature有如下: 1). 个人活动分类浏览: 其中将用户的各个照片依据内容,时

多线程并发更新同一条记录

有一个任务表,每个任务有n个事项要并发处理, 每个事项完成时需要更新已完成数,即finished+1,当n个事项全部处理完成即整个任务完成时需要做任务的统计工作. 数据库通过行级锁来保证并发更新准确性,测试代码如下: public class Concurrency {          /**执行更新语句,根据commitImmediately决定是否立即提交*/     public static int executeUpdate(String sql, boolean commitImm

Winform实现多线程异步更新UI(进度及状体信息)

引言 在进行Winform程序开发需要进行大量的数据的读写操作的时候,往往会需要一定的时间,然在这个时间段里面,界面ui得不到更新,导致在用户看来界面处于假死的状态,造成了不好的用户体验.所以在大量数据操作的应用上,需要使用多线程来处理这种情况.在c#中使用多线程很方便只需要使用System.Threading.Thread的一个实例的Start方法就行了,但是如何实现多线程之间的交互就不是那么简单.本文实现了用子线程去处理数据,并实时更新主线程的ui状态了.下面就开始一步步的去实现异步线程更新

Winform实现多线程异步更新UI(进度及状态信息)

引言 在进行Winform程序开发需要进行大量的数据的读写操作的时候,往往会需要一定的时间,然在这个时间段里面,界面ui得不到更新,导致在用户看来界面处于假死的状态,造成了不好的用户体验.所以在大量数据操作的应用上,需要使用多线程来处理这种情况.在c#中使用多线程很方便只需要使用System.Threading.Thread的一个实例的Start方法就行了,但是如何实现多线程之间的交互就不是那么简单.本文实现了用子线程去处理数据,并实时更新主线程的ui状态了.下面就开始一步步的去实现异步线程更新

windows程序消息机制(Winform界面更新有关)--转

1. Windows程序消息机制 Windows GUI程序是基于消息机制的,有个主线程维护着消息泵.这个消息泵让windows程序生生不息. Windows程序有个消息队列,窗体上的所有消息是这个队列里面消息的最主要来源.这里的While循环使用了GetMessage() 这个方法,这是个阻塞方法,也就是队列为空时方法就会阻塞,从而这个While循环停止运动,这避免了一个程序把cpu无缘无故的耗尽,让其他程序难以得到响应.当然在某些需要cpu最大限度运动的程序里面就可以使用另外的方法,例如某些

奔五的人学iOS:通知所有界面更新

好久没写东西了,今天来留个笔记. 毕竟没能全面了解iOS的工作机制,匆忙用工程来练手,有些比较简单的问题,解决起来还是走了些弯路. 在我的工程中,有后台工作的代码,后台工作完成后需要通知前台所有页面刷新,最初我使用自定义的protocol来处理,理论上是可行的,我将所有需要更新的界面都实现该刷新协议,然后将该界面实例添加进一个数组,在需要更新界面时遍历该数组,挨个通知. protocol MiRefresh{ func refresh() } var list = [MiRefresh]() /

【转】MFC界面更新实现方法

原文网址:http://www.cnblogs.com/skywatcher/p/3572311.html 1.更新窗口 即采用UpdateWindow()函数立即发送WM_PAINT消息更新整个窗口. void CEditTestDlg::OnBnClickedBtnSysUpdate() { CString csTmp; int i = 0; while (i < 100) { Sleep(20); i += 1; csTmp.Format(_T("%d"),i); m_va