我需要在页面加载后发帖,但我使用的是线程

本文关键字:线程 加载 | 更新日期: 2023-09-27 18:31:29

我正在一个页面上做一篇文章,工作原理如下:单击链接并打开文本框,然后准确加载到另一个帖子以保存输入文本的内容。

遵循我正在使用的代码。

private void btnRobo_Click(object sender, EventArgs e)
    {
        // string[] paginasArray = new string[] { txtPaginas.Text };
        string[] paginasArray = txtPaginas.Text.Split(''n');
        foreach (string s in paginasArray)
        {
            //  webBrowser1.Navigate(s);
            if (s.Trim() != "")
                runBrowserThread(new Uri(s));
        }
    }

        private void runBrowserThread(Uri url)
    {
        var th = new Thread(() =>
        {
            var br = new WebBrowser();
            br.DocumentCompleted += browser_DocumentCompleted;
            br.Navigate(url);
            Application.Run();
        });
        th.SetApartmentState(ApartmentState.STA);
        th.Start();
    }
    void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        var br = sender as WebBrowser;
        if (br.Url == e.Url)
        {
            Console.WriteLine("Natigated to {0}", e.Url);
            webBrowser1.Navigate(e.Url);
            //ExecutaPostagem();
            HtmlElementCollection elements = br.Document.GetElementsByTagName("input");

            foreach (HtmlElement currentElement in elements)
            {
                if ((currentElement.GetAttribute("type") == "submit") && (currentElement.Name == "view_post"))
                {
                    string postagem = txtPublicacao.Text;
                    HtmlElement elea = br.Document.GetElementById("u_0_0");
                    if (elea != null) elea.SetAttribute("value", postagem);
                    currentElement.InvokeMember("click");
                    Thread.Sleep(1000);
                    fullyLoaded = false;
                }

            }

            Application.ExitThread();   // Stops the thread
        }
    }
加载

页面后,browser_DocumentCompleted需要运行下面的代码,但是如果我使用线程并且不再使用事件browser_DocumentCompleted,我将如何运行代码

var links = br.Document.GetElementsByTagName("A");
            // var links = webBrowser1.Document.All;
            foreach (HtmlElement link in links)
            {
                // if (link.InnerText != null)
                if ((link.InnerText != null) && (link.InnerText.Contains("comentários")))
                {
                    Thread.Sleep(1000);
                    MessageBox.Show(link.InnerText.ToString()); //.Contains("comentários").ToString());
                    //MessageBox.Show(link.GetAttribute("InnerText")); 
                    // MessageBox.Show(link.GetAttribute("className"));
                    link.InvokeMember("click");
                    break;
                }
            }

我需要在页面加载后发帖,但我使用的是线程

根本不要使用 WebClient 或 Threads。请改用 http://restsharp.org/来调用您的网站。Restsharp非常容易使用。

而不是使用线程使用async/await(restsharp也支持这一点)稍后修改UI。