我是 YouTube 数据 API 和 C# 的新手。我想搜索视频并将结果显示到列表视图中,我做到了,但我不能异步进行。我已经搜索并尝试了很多,但最终一无所获。
http://google-gdata.googlecode.com/svn/docs/folder48/Multithreadedoperations.html
请帮我。
我是 YouTube 数据 API 和 C# 的新手。我想搜索视频并将结果显示到列表视图中,我做到了,但我不能异步进行。我已经搜索并尝试了很多,但最终一无所获。
http://google-gdata.googlecode.com/svn/docs/folder48/Multithreadedoperations.html
请帮我。
大多数 WebService API(尤其是REST API )不提供异步方式来检索结果,因为一般来说,它们试图保持无状态:我相信 Youtube API 也不例外。
相反,您将需要依靠传统方法来模拟异步请求,例如以下之一:
[编辑:对于 .NET,我认为这可能不是基于反应器的方法的理想候选者]
在这方面,YouTube 没有什么特别之处:在从大多数 API 获取大型结果集时,您可能会使用相同的技术。
您不能使用异步委托将任何非异步方法包装在异步调用中吗?我的参考是这个链接。
好的,那么您是否进行了类似这样的异步调用...
private delegate <returnType> YouTubeAPI( <args> )
private YouTubeAPI func;
private IAsyncResult ticket;
void YouTubeSearchFunc( string what )
{
func = <whatever the you tube call is>
ticket = func.BeginInvoke( <args needed> );
// WE MUST do this in order to return flow of control to program
return;
}
// later we need to check if the ticket is done and then get it
if ( ticket.IsComplete == true )
// get it
else
// continue on like normal
我们不能立即获取值的原因是因为这会阻塞程序。这正是我们不想做的。因此,相反,我们必须以一种我们检查它是否在单独更新中完成的方式来构建程序。这可以让 Win-forms 或 GTK 运行,使其看起来不会挂起。不幸的是,这是一个痛苦的屁股。您可能想要做的只是使用后台工作人员。在这里阅读这部分,看看这是否对您没有更多帮助,因为 BackgroundWorkers 可以有回调。然后你所要做的就是设置一个后台工作者,然后将你的更新函数挂接到完成的事件中。