将程序放在循环中

时间:2013-06-06 17:14:14

标签: c# loops webbrowser-control

刚刚完成一个程序,本网站上的一些非常有帮助的人建议我。该程序从列表框中获取用户名,使用webBrowser控件输入正确的URL,然后发布消息。现在我想把它放在自动驾驶仪上,让我们以编程方式查看名称列表。我在哪里可以添加循环?

    private bool WaitingForData;
    public void master()
    {
        listBox();
        Application.DoEvents();

        GetData();
        Application.DoEvents();
    }

    public void listBox()//Handles getting names from ListBox
    {
        //load names to listbox
    }

    private void GetData()
    {  
        webBrowser1.Navigate(inputURLID);

        WaitingForData = true;
    }

    private void SendData()
    {
        webBrowser1.Document.GetElementById("subject").SetAttribute("value",        textBox2_Subject.Text);//To (username)

        webBrowser1.Document.GetElementById("message").SetAttribute("value", richTextBox1.Text);//Subject

        webBrowser1.Document.GetElementById("Submit").InvokeMember("click");//Message
    }

    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        if (WaitingForData) SendData();
        WaitingForData = false;
    }       

2 个答案:

答案 0 :(得分:1)

假设您希望自动执行此操作以使用用户名列表,则有两种基本可能性。

1)您希望启动UI,让某人手动添加逗号或换行符分隔名称列表,然后按一下go按钮 2)您希望从数据库/ Web服务获取名称列表或定期替换文本文件,并在有新信息可用时自动执行程序。

让我们依次解决每个问题

1)您需要从列表框中检索数据并将其拆分为用户名列表。如果您使用逗号分隔值(例如"Paul, Steve, Michael"),则可以使用

拆分它们

var names = myListBox.Text.Split(',');

然后循环遍历它们以使用类似于:

的代码

foreach(var name in names) { doWork(name); }

在选项2中,您需要一种不同的程序样式,Windows服务或与任务计划程序一起运行的命令行应用程序。

在任何一种情况下,我都不确定程序的当前结构是否真的适合批量处理。

作为最后一点,如果您要做的是通过基于浏览器的客户端(这就是它的样子)自动发布电子邮件消息,那么首先这是一个非常糟糕的主意,特别是使用Web浏览器控件要做到这一点,请确保您有合法权利这样做,因为如果不加以检查,发送此类网站是非常有害的。

答案 1 :(得分:0)

如果要在“循环”中运行整个程序,最好的方法是通过Windows任务计划程序。只需设置一个指向程序的任务,然后将其设置为常常运行。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa383614%28v=vs.85%29.aspx