我正在写一些应用程序将发送http请求到服务器。我的应用程序将通过定时器发送请求。例如,我需要以2秒的时间间隔发送1类请求,第二类请求 - 10秒等等。 我明白,最好有一个调度程序来推送我的请求。但问题是我如何发送请求和处理响应而不冻结用户界面?我需要BackgroundWorker吗?
p.s.现在我有MyAdapter类,它封装了请求和响应的所有工作,还有MyScheduler类,它通过定时器发送请求。
我正在写一些应用程序将发送http请求到服务器。我的应用程序将通过定时器发送请求。例如,我需要以2秒的时间间隔发送1类请求,第二类请求 - 10秒等等。 我明白,最好有一个调度程序来推送我的请求。但问题是我如何发送请求和处理响应而不冻结用户界面?我需要BackgroundWorker吗?
p.s.现在我有MyAdapter类,它封装了请求和响应的所有工作,还有MyScheduler类,它通过定时器发送请求。
您应该确实使用BackGroundWorker,如果您需要在此期间更新UI,则可以使用Dispatcher.Invoke()方法。
但问题是我如何发送请求和处理响应而不冻结用户界面?
您可以定期发送您的请求use timers。如果您在请求成功时需要更新UI,则可能需要使用Dispatcher.Invoke
或Control.Invoke
。
你有各种各样的在后台执行的工作选择,同时用户界面保持响应:
老,但可靠:BackgroundWorker
一直围绕.NET框架很长一段时间,并会为您的要求工作得很好。 Lots of examples可以在这个网站和其他地方找到。本领域的
状态:Task
类,由于.NET 4可用,是considered to be an improvement over BackgroundWorker。
全新:本Async
extensions是做 “后台的东西” 的新途径。不需要多线程和手动同步,一切都“正常”。不过,目前这只是“社区预览”阶段。
我完全同意@Abbas,我对他/她的建议的唯一评论是Dispatcher.Invoke()可用,如果您的应用程序是WPF应用程序;如果您在Windows窗体下,您可以使用Control.Invoke()从您的BackgroundWorker进程安全地与用户界面进行交互。我最近在这里回答了类似的问题:[link](http://stackoverflow.com/questions/9370655/allowing-user-interaction/9371623#9371623)。你可以看到使用'Control.Invoke()'的例子。 – 2012-02-21 15:12:54
感谢您的补充信息!旁注:'他'是正确的:D – Abbas 2012-02-21 15:14:32