首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我需要在页面加载后写一篇文章,但我使用的是线程

我需要在页面加载后写一篇文章,但我使用的是线程
EN

Stack Overflow用户
提问于 2016-01-23 02:16:02
回答 1查看 43关注 0票数 2

我正在页面上写一篇文章,其工作方式如下:单击链接并打开文本框,然后准确地加载到另一篇文章中以保存输入文本的内容。

遵循我正在使用的代码。

代码语言:javascript
运行
复制
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,我将如何运行代码

代码语言:javascript
运行
复制
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;
                }

            }
EN

Stack Overflow用户

发布于 2016-01-23 02:43:31

不要使用WebClient或线程。相反,使用http://restsharp.org/调用您的网站。雷斯夏普非常容易使用。

而不是使用线程,使用异步/等待(restsharp也支持这一点)稍后修改UI。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34958880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档