【问题标题】:nested timer code is not working嵌套计时器代码不起作用
【发布时间】:2017-12-25 19:05:45
【问题描述】:

我制作了一个流量机器人...它适用于一个网站。我将其设置为多个网站。 因此我编码如下。

 IEnumerator<string> proxies;
    IEnumerator<string> websites;
    private void button1_Click(object sender, EventArgs e)
    {
        List<string> strings = new List<string>();

        string[] ipaddress = textBox2.Text.Split('\n');

        for(int i=0;i<Convert.ToInt32(ipaddress.Length);i++){

            strings.Add(ipaddress[i]);
        }


        proxies = strings.GetEnumerator();
        timer1.Start();

        //websites = strings.GetEnumerator();
        //timer1.Start();
      //  websites.MoveNext();
        proxies.MoveNext();
    }


    private void timer1_Tick(object sender, EventArgs e)
    {


        WinInetInterop.SetConnectionProxy(proxies.Current);
        label1.Text = proxies.Current;
        string[] website = textBox1.Text.Split('\n');
        List<string> stringsweb = new List<string>();

        for (int j = 0; j < Convert.ToInt32(website.Length); j++)
        {

            stringsweb.Add(website[j]);
        }

        websites = stringsweb.GetEnumerator();
        timer2.Enabled = true;


            //webBrowser1.Navigate(website[0]);

        timer1.Enabled = proxies.MoveNext();



    }

   private void timer2_Tick(object sender, EventArgs e)
    {
        webBrowser1.Navigate(websites.Current);
        label2.Text = websites.Current;
        timer2.Enabled = websites.MoveNext();
    }

如您所见,我在 timer1_Tick 中调用了 timer2_Tick 方法...但是我的代码不起作用...

问题是它没有在timer1_tick中调用timer2_Tick方法,所以网站没有加载...

Timer1,Timer2 间隔 =10s

我想做

从 textbox2 获取一个代理 ---> 为该代理加载 2 个网站

请告诉我我的错误

【问题讨论】:

  • Array 的 Length 属性已经是一个整数。无需转换它。您可以使用 string.Split('\n').ToList(); 直接从 Split 分配列表
  • 好的。但它工作没有任何问题,这不是错误。
  • 我会在 Timer1 滴答作响时将其设置为禁用,并使其保持禁用状态,直到 Timer2 滴答作响并完成对站点的导航。那时我会禁用 Timer2 并重新启用 Timer1
  • 你能告诉我它作为答案吗?然后我可以检查它

标签: c# timer ienumerator


【解决方案1】:

我无法测试它,但我想你的计时器相互重叠,所以你可以尝试更好地同步它们的滴答声

IEnumerator<string> proxies;
IEnumerator<string> websites;
private void button1_Click(object sender, EventArgs e)
{
    List<string> strings = new List<string>();
    strings = textBox2.Text.Split('\n').ToList();
    proxies = strings.GetEnumerator();
    timer1.Start();
}

private void timer1_Tick(object sender, EventArgs e)
{
    // Stop the first timer until the second one completes
    timer1.Enabled = false;
    WinInetInterop.SetConnectionProxy(proxies.Current);
    label1.Text = proxies.Current;
    List<string> stringsweb = textBox1.Text.Split('\n').ToList();
    websites = stringsweb.GetEnumerator();
    timer2.Enabled = true;
}

private void timer2_Tick(object sender, EventArgs e)
{
    webBrowser1.Navigate(websites.Current);
    label2.Text = websites.Current;

    // Let's continue with the second timer until completition
    timer2.Enabled = websites.MoveNext();

    // Reenable the first when the second timer completes
    if(!timer2.Enabled) 
        timer1.Enabled = strings.MoveNext();
}

【讨论】:

  • 您的代码正在运行。但是有一些步骤是没有价值的,我不知道代码在哪里
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-09
  • 2018-11-26
  • 1970-01-01
  • 2018-08-18
相关资源
最近更新 更多