C#/.Net Youtube V3 API,发布要控制的列表项
我目前正在使用YouTube API进行一个小型测试项目。 我试图实现的非常简单:我使用API执行搜索请求,获取标题和视频ID,然后将它们放入数据表中。 从这里开始,我想对每个结果制作一个按钮,并将它们添加到FlowLayoutPanel中,所以我想使用foreach循环。但这里出现的问题是,当我得到100多个结果时,它似乎会抛出错误(我猜windows窗体不喜欢制作100多个按钮) 我想知道的是,我是否可以提高代码的效率,例如,我是否可以在下面添加两个按钮来显示“下一步”和“上一步”100个结果。所以一次只能加载100个 下面是我的代码,可能有点混乱,因为我对c#还很陌生 这是我用来开始搜索的按钮C#/.Net Youtube V3 API,发布要控制的列表项,c#,.net,visual-studio-2015,youtube-data-api,C#,.net,Visual Studio 2015,Youtube Data Api,我目前正在使用YouTube API进行一个小型测试项目。 我试图实现的非常简单:我使用API执行搜索请求,获取标题和视频ID,然后将它们放入数据表中。 从这里开始,我想对每个结果制作一个按钮,并将它们添加到FlowLayoutPanel中,所以我想使用foreach循环。但这里出现的问题是,当我得到100多个结果时,它似乎会抛出错误(我猜windows窗体不喜欢制作100多个按钮) 我想知道的是,我是否可以提高代码的效率,例如,我是否可以在下面添加两个按钮来显示“下一步”和“上一步”100个结
private void Youtube_Search_Video_Button_Click(object sender, EventArgs e)
{
string Search_Vid = Youtube_SearchVideo_Box.Text;
if (Youtube_SearchVideo_Box.Text == "Search video" || Youtube_SearchVideo_Box.Text == "")
{
Youtube_SearchVideo_Box.Text = "Search video";
}
if (Search_Vid != null && Search_Vid != "Search video" && Search_Vid != Last_Search_Vid)
{
Last_Search_Vid = Youtube_SearchVideo_Box.Text;
search_results_vids.Clear();
if (search_results_vids.Columns.Count.Equals(0)) {
search_results_vids.Columns.Add("VideoTitle");
search_results_vids.Columns.Add("VideoID");
}
flowLayoutPanel1.Controls.Clear();
toolStripStatusLabel1.Text = "Status : Searching...";
backgroundWorker1.RunWorkerAsync();
}
}
这将启动下面的后台工作。(当然还有在此之前创建的数据表。)
我曾尝试将Foreach循环添加到backgroundworker的DoWork部分,但后来它似乎都跳过了。欢迎任何帮助,如果我做错了什么,请告诉我(仍在学习!)
编辑:为了澄清这是我一直坚持的按钮创建部分。将表中的项目列表到listview很好。所有的按钮设置似乎都与它们的加载时间有关。所以,这就是为什么我想尝试一种方法,从DataTable中每个“页面”只加载100。我只是不知道如何处理这个问题。我认为您应该考虑将您的结果显示在页面中
我认为你应该考虑把你的研究结果放在网页上
是的,您可以在同一个循环中添加按钮(backgroundWorker1\u DoWork),只需确保添加/更改UI应在不同的线程中…否则会出现跨线程异常。 因此,一种方法是
Action actUI = ()=>{
Button button = new Button();
button.Text = get Data from newsearchresult ;
if (button.Text.Length >= 35)
{
button.Text.Remove(button.Text.Length - (button.Text.Length - 35));
}
button.Tag = get Data from newsearchresult ;;
button.TextImageRelation = TextImageRelation.ImageBeforeText;
button.FlatStyle = FlatStyle.Flat;
button.ForeColor = Color.LightSteelBlue;
button.BackColor = Color.SteelBlue;
button.Width = (flowLayoutPanel1.Width - 120);
button.TextAlign = ContentAlignment.MiddleLeft;
button.Height = 35;
button.Font = new Font(button.Font.FontFamily, 10);
flowLayoutPanel1.Controls.Add(button);
};
if(flowLayoutPanel1.InvokeRequired)
flowLayoutPanel1.BeginInvoke(actUI);
else
flowLayoutPanel1.Invoke(actUI);
是的,您可以在同一个循环中添加按钮(backgroundWorker1\u DoWork),只需确保添加/更改UI应位于不同的线程中……否则您将出现跨线程异常。 因此,一种方法是
Action actUI = ()=>{
Button button = new Button();
button.Text = get Data from newsearchresult ;
if (button.Text.Length >= 35)
{
button.Text.Remove(button.Text.Length - (button.Text.Length - 35));
}
button.Tag = get Data from newsearchresult ;;
button.TextImageRelation = TextImageRelation.ImageBeforeText;
button.FlatStyle = FlatStyle.Flat;
button.ForeColor = Color.LightSteelBlue;
button.BackColor = Color.SteelBlue;
button.Width = (flowLayoutPanel1.Width - 120);
button.TextAlign = ContentAlignment.MiddleLeft;
button.Height = 35;
button.Font = new Font(button.Font.FontFamily, 10);
flowLayoutPanel1.Controls.Add(button);
};
if(flowLayoutPanel1.InvokeRequired)
flowLayoutPanel1.BeginInvoke(actUI);
else
flowLayoutPanel1.Invoke(actUI);
嗯,但是youtube搜索并不是一个只需要2秒钟就可以完成的问题。我只能在列表视图中将其列为文本,一切正常。问题是,当我要求表单应用程序创建所有这些按钮而不是listview格式时,表单应用程序只是放弃了。所以我想我要问的是如何在数据表上进行分页?另外,我正在对已存在的搜索结果使用分页listRequest.PageToken=nextPageToken;嗯,但是youtube搜索并不是一个只需要2秒钟就可以完成的问题。我只能在列表视图中将其列为文本,一切正常。问题是,当我要求表单应用程序创建所有这些按钮而不是listview格式时,表单应用程序只是放弃了。所以我想我要问的是如何在数据表上进行分页?另外,我正在对已存在的搜索结果使用分页listRequest.PageToken=nextPageToken;嘿,这看起来很有用!但我最近才开始学习c#所以你能给我指出一个正确的方向,让我可以阅读更多关于这方面的内容吗?我已经阅读了一些关于InvokerRequest的内容,并认为我需要它才能使UI部分在backgroundworker中工作。但我还不太明白它的用途。也做button.Tag=从newsearchresult获取数据;获取正确的项目,它如何知道获取第二个项目?(很抱歉没有问题哈哈)还有另一个问题:我假设flowlayoutpanel调用所需的部分进入循环?但是我应该在哪里添加动作呢?嘿,这似乎很有帮助!但我最近才开始学习c#所以你能给我指出一个正确的方向,让我可以阅读更多关于这方面的内容吗?我已经阅读了一些关于InvokerRequest的内容,并认为我需要它才能使UI部分在backgroundworker中工作。但我还不太明白它的用途。也做button.Tag=从newsearchresult获取数据;获取正确的项目,它如何知道获取第二个项目?(很抱歉没有问题哈哈)还有另一个问题:我假设flowlayoutpanel调用所需的部分进入循环?但我应该在哪里添加操作?
Action actUI = ()=>{
Button button = new Button();
button.Text = get Data from newsearchresult ;
if (button.Text.Length >= 35)
{
button.Text.Remove(button.Text.Length - (button.Text.Length - 35));
}
button.Tag = get Data from newsearchresult ;;
button.TextImageRelation = TextImageRelation.ImageBeforeText;
button.FlatStyle = FlatStyle.Flat;
button.ForeColor = Color.LightSteelBlue;
button.BackColor = Color.SteelBlue;
button.Width = (flowLayoutPanel1.Width - 120);
button.TextAlign = ContentAlignment.MiddleLeft;
button.Height = 35;
button.Font = new Font(button.Font.FontFamily, 10);
flowLayoutPanel1.Controls.Add(button);
};
if(flowLayoutPanel1.InvokeRequired)
flowLayoutPanel1.BeginInvoke(actUI);
else
flowLayoutPanel1.Invoke(actUI);