程序未响应 SearchListResponse
Program not responding from SearchListResponse
我正在尝试使用 Winforms 应用程序收集 YouTube 视频的数据。当我如下所示调用 YTSearch()
方法时,程序在到达
时停止响应
var slResponse = await slRequest.ExecuteAsync();
请求已启动,但没有停止,也没有完成,也没有在 try catch 上触发 catch。我已经设法使用 Discord.NET 使用 Discord 机器人获得完全相同的功能。在输出中是
Exception thrown: 'Google.GoogleApiException' in Google.Apis.dll
Exception thrown: 'Google.GoogleApiException' in mscorlib.dll
Exception thrown: 'Google.GoogleApiException' in mscorlib.dll`
图书馆:
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Windows.Forms;
using Google.Apis.YouTube.v3;
using Google.Apis.Services;
using System.Diagnostics;
方法:
public async Task<List<Video>> YTSearch(string query)
{
string ytAPI = APIKEY; // Ommitted
var ytService = new YouTubeService(new BaseClientService.Initializer()
{
ApiKey = ytAPI,
ApplicationName = "YouTubeDownloader"
});
var slRequest = ytService.Search.List("snipper");
slRequest.Q = query;
slRequest.MaxResults = 10;
var slResponse = await slRequest.ExecuteAsync();
List<Video> vidList = new List<Video>();
return vidList;
}
通话:
private void btnSearch_Click(object sender, EventArgs e)
{
List<Video> vidList = YTSearch(txtSearch.Text).Result;
}
首先,您有一个与您的错误无关的小错字,您应该改正。第一个参数是部分有效值是
- 内容详情:2
- 编号:0
- 片段:2
你有狙击手
不清楚这是否是问题所在,因为您遇到的错误与 API.
无关
这个问题听起来更像是 dll 的问题。我会尝试重新导入 nuget 包确保你的项目 using.net 4.5
我还没有对此进行测试,但我相当确定您需要使用 ConfigureAwait(false)
。因此,在您的 YTSearch
方法中,您需要使用以下行:
var slResponse = await slRequest.ExecuteAsync().ConfigureAwait(false);
这是必需的,因为您正在使用 .Result
.
阻止按钮处理程序中的结果
This MSDN article有点老了,但是说明了问题。
我正在尝试使用 Winforms 应用程序收集 YouTube 视频的数据。当我如下所示调用 YTSearch()
方法时,程序在到达
var slResponse = await slRequest.ExecuteAsync();
请求已启动,但没有停止,也没有完成,也没有在 try catch 上触发 catch。我已经设法使用 Discord.NET 使用 Discord 机器人获得完全相同的功能。在输出中是
Exception thrown: 'Google.GoogleApiException' in Google.Apis.dll
Exception thrown: 'Google.GoogleApiException' in mscorlib.dll
Exception thrown: 'Google.GoogleApiException' in mscorlib.dll`
图书馆:
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Windows.Forms;
using Google.Apis.YouTube.v3;
using Google.Apis.Services;
using System.Diagnostics;
方法:
public async Task<List<Video>> YTSearch(string query)
{
string ytAPI = APIKEY; // Ommitted
var ytService = new YouTubeService(new BaseClientService.Initializer()
{
ApiKey = ytAPI,
ApplicationName = "YouTubeDownloader"
});
var slRequest = ytService.Search.List("snipper");
slRequest.Q = query;
slRequest.MaxResults = 10;
var slResponse = await slRequest.ExecuteAsync();
List<Video> vidList = new List<Video>();
return vidList;
}
通话:
private void btnSearch_Click(object sender, EventArgs e)
{
List<Video> vidList = YTSearch(txtSearch.Text).Result;
}
首先,您有一个与您的错误无关的小错字,您应该改正。第一个参数是部分有效值是
- 内容详情:2
- 编号:0
- 片段:2
你有狙击手
不清楚这是否是问题所在,因为您遇到的错误与 API.
无关这个问题听起来更像是 dll 的问题。我会尝试重新导入 nuget 包确保你的项目 using.net 4.5
我还没有对此进行测试,但我相当确定您需要使用 ConfigureAwait(false)
。因此,在您的 YTSearch
方法中,您需要使用以下行:
var slResponse = await slRequest.ExecuteAsync().ConfigureAwait(false);
这是必需的,因为您正在使用 .Result
.
This MSDN article有点老了,但是说明了问题。