Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#/.Net Youtube V3 API,发布要控制的列表项_C#_.net_Visual Studio 2015_Youtube Data Api - Fatal编程技术网

C#/.Net Youtube V3 API,发布要控制的列表项

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个结

我目前正在使用YouTube API进行一个小型测试项目。 我试图实现的非常简单:我使用API执行搜索请求,获取标题和视频ID,然后将它们放入数据表中。 从这里开始,我想对每个结果制作一个按钮,并将它们添加到FlowLayoutPanel中,所以我想使用foreach循环。但这里出现的问题是,当我得到100多个结果时,它似乎会抛出错误(我猜windows窗体不喜欢制作100多个按钮)

我想知道的是,我是否可以提高代码的效率,例如,我是否可以在下面添加两个按钮来显示“下一步”和“上一步”100个结果。所以一次只能加载100个

下面是我的代码,可能有点混乱,因为我对c#还很陌生

这是我用来开始搜索的按钮

    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);