有一个这样的需求,在主线程中(UI界面),先采数据,后分析数据,比如采一次数据可能要10分钟,分析一次数据要20分钟,一共采两次和分析两次。
前面采完的数据在分析时,后面采的数据又过来了,如果发现前面的还在分析,就得等着,直到前面的分析完了才能分析后一个数据。
那么问题来了,怎么等呢?
方法1,使用Thread,将分析数据放到子线程中
但分析数据也会涉及到ui的操作,而ui是不能在子线程中操作的,所以该方法否决。
方法2,使用AutoResetEvent或ManualResetEvent函数。
使用invoke异步方法,分析完Set,分析开始Reset,类似Sleep,阻塞方式。该方法导致主界面卡死,用户体验为0,否决。
方法3,消息队列。
在每次分析时,将要分析的内容放到消息队列中,当分析完时,检查该队列是否为空,若有值,就分析队列的第一个值,并将该值从队列中去除。该方法解决了问题。
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-10 09:36:38