我用timer控件实现了这个功能,但是我需要把它做成一个类,请各位大神指教
18 个解决方案
#1
能把问题描述清楚么?一般来说你这个其实和sleep,timer,等xxx秒什么的没关系,只是你用了不合适(错误)的解决方法而已。
比如,我很难理解"因为程序需要调搜狗地图的api返回一个在值,但是需要等3秒钟才能得到这个值"这句话的意思。
就好像是在说:
你这里的data,直接运行的话,就是个null,必须要在Console.WriteLine之前磨蹭3秒钟才能有值?
显然有问题啊
比如,我很难理解"因为程序需要调搜狗地图的api返回一个在值,但是需要等3秒钟才能得到这个值"这句话的意思。
就好像是在说:
var data = api.Func();
Console.WriteLine(data);
你这里的data,直接运行的话,就是个null,必须要在Console.WriteLine之前磨蹭3秒钟才能有值?
显然有问题啊
#2
3秒钟的时间,为什么是3秒? 调用API到返回结果需要3秒?
#3
你不会用异步么??干嘛要在主线程sleep
#4
说一种简单方法:
开个线程去搜狗的api取值,
工作线程和主线程可以采用ManualResetEvent来处理,
主线程 manualEvent.WaitOne();
工作线程完成后manualEvent.set()
开个线程去搜狗的api取值,
工作线程和主线程可以采用ManualResetEvent来处理,
主线程 manualEvent.WaitOne();
工作线程完成后manualEvent.set()
#5
用多线程,sleep它就不会把整个程序停了
#6
干嘛要sleep,最差也要弹个什么加载的窗体出来,告诉用户正在取数据嘛。
#7
异步回调啊,这个想都不用想。
#8
因为他满脑子就是“等、等、等”这种思路。他就从来没有“网络驱动层会自动回调或者抛出事件通知”这种任务驱动设计概念。
#9
是的,他们不懂事件和委托,觉得那东西没用。同时遇到回调才能解决的问题又无法解决。
#10
因为程序需要调搜狗地图的api返回一个在值,但是需要等3秒钟才能得到这个值。不能用sleep,因为它会彻底把程序停止,停止结束后依然需要等待3秒钟。
我用timer控件实现了这个功能,但是我需要把它做成一个类,请各位大神指教
很可惜。你稍微深入一点点就会想到,一定有些东西是可以及时通知你“什么时候刚好返回了结果”的。如果你懒得去自己寻找答案,那么软件设计对于你来说就是一个“坑”。不是它坑你,就是你坑自己。
#11
开一个线程,异步执行。
#12
你可以用个while循环啊 在while中判断等时间间隔TimeSpan大于3秒的时候跳出啊
#13
异步执行,不要等,不要sleep,万一网络不好3秒没回来呢.
#14
异步回调啊,这个想都不用想。
因为他满脑子就是“等、等、等”这种思路。他就从来没有“网络驱动层会自动回调或者抛出事件通知”这种任务驱动设计概念。
有点难受,但真心接受批评。
#15
信号量。启用一个读线程,读完立马返回,启用另一个接收信号线程,内部等待,设置超时3秒,
mutex.waitone(3000) 。。。。
mutex.waitone(3000) 。。。。
#16
显然是异步方法+回调函数
#17
stream类的 BeginRead 和 BeginWrite 方法就是异步读写,楼主查下具体用法吧
#18
#1
能把问题描述清楚么?一般来说你这个其实和sleep,timer,等xxx秒什么的没关系,只是你用了不合适(错误)的解决方法而已。
比如,我很难理解"因为程序需要调搜狗地图的api返回一个在值,但是需要等3秒钟才能得到这个值"这句话的意思。
就好像是在说:
你这里的data,直接运行的话,就是个null,必须要在Console.WriteLine之前磨蹭3秒钟才能有值?
显然有问题啊
比如,我很难理解"因为程序需要调搜狗地图的api返回一个在值,但是需要等3秒钟才能得到这个值"这句话的意思。
就好像是在说:
var data = api.Func();
Console.WriteLine(data);
你这里的data,直接运行的话,就是个null,必须要在Console.WriteLine之前磨蹭3秒钟才能有值?
显然有问题啊
#2
3秒钟的时间,为什么是3秒? 调用API到返回结果需要3秒?
#3
你不会用异步么??干嘛要在主线程sleep
#4
说一种简单方法:
开个线程去搜狗的api取值,
工作线程和主线程可以采用ManualResetEvent来处理,
主线程 manualEvent.WaitOne();
工作线程完成后manualEvent.set()
开个线程去搜狗的api取值,
工作线程和主线程可以采用ManualResetEvent来处理,
主线程 manualEvent.WaitOne();
工作线程完成后manualEvent.set()
#5
用多线程,sleep它就不会把整个程序停了
#6
干嘛要sleep,最差也要弹个什么加载的窗体出来,告诉用户正在取数据嘛。
#7
异步回调啊,这个想都不用想。
#8
异步回调啊,这个想都不用想。
因为他满脑子就是“等、等、等”这种思路。他就从来没有“网络驱动层会自动回调或者抛出事件通知”这种任务驱动设计概念。
#9
异步回调啊,这个想都不用想。
因为他满脑子就是“等、等、等”这种思路。他就从来没有“网络驱动层会自动回调或者抛出事件通知”这种任务驱动设计概念。
是的,他们不懂事件和委托,觉得那东西没用。同时遇到回调才能解决的问题又无法解决。
#10
因为程序需要调搜狗地图的api返回一个在值,但是需要等3秒钟才能得到这个值。不能用sleep,因为它会彻底把程序停止,停止结束后依然需要等待3秒钟。
我用timer控件实现了这个功能,但是我需要把它做成一个类,请各位大神指教
很可惜。你稍微深入一点点就会想到,一定有些东西是可以及时通知你“什么时候刚好返回了结果”的。如果你懒得去自己寻找答案,那么软件设计对于你来说就是一个“坑”。不是它坑你,就是你坑自己。
#11
开一个线程,异步执行。
#12
你可以用个while循环啊 在while中判断等时间间隔TimeSpan大于3秒的时候跳出啊
#13
异步执行,不要等,不要sleep,万一网络不好3秒没回来呢.
#14
异步回调啊,这个想都不用想。
因为他满脑子就是“等、等、等”这种思路。他就从来没有“网络驱动层会自动回调或者抛出事件通知”这种任务驱动设计概念。
有点难受,但真心接受批评。
#15
信号量。启用一个读线程,读完立马返回,启用另一个接收信号线程,内部等待,设置超时3秒,
mutex.waitone(3000) 。。。。
mutex.waitone(3000) 。。。。
#16
显然是异步方法+回调函数
#17
stream类的 BeginRead 和 BeginWrite 方法就是异步读写,楼主查下具体用法吧