为什么我得到异常[System.Runtime.InteropServices.COMException] = {“请求的资源正在使用。(HRESULT异常:0x800700AA)”}?

时间:2015-12-27 12:27:25

标签: c# .net winforms

例外是在计时器刻度事件中。 在变量postsCounter大约为50之后,我在计时器tick事件中得到异常,它将在计时器tick事件中进入catch。

确定它发生的线路和原因。 没有使用try和catch和断点我在程序运行时看到postCounter到50左右我看到一个消息弹出窗口说“来自网页的消息内存在行:1”

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using mshtml;
using HtmlAgilityPack;
using System.Net;
using System.IO;

namespace WebSite_Login_And_Browsing
{
    public partial class Facebook_Post : Form
    {
        WebBrowser wb = new WebBrowser();
        int postsCounter = 0;
        StreamWriter w = new StreamWriter(@"e:\posts.txt");

        public Facebook_Post()
        {
            InitializeComponent();

            webBrowser1.ScriptErrorsSuppressed = true;
            webBrowser1.Navigate("https://www.facebook.com/");
            timer1.Enabled = true;
            label4.Text = DateTime.Now.ToString();
            w.WriteLine(label4.Text.ToString());
            w.WriteLine(Environment.NewLine);
            label5.Visible = false;
            label2.Visible = false;
        }

        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            try
            {
                if (e.Url.AbsoluteUri != webBrowser1.Url.AbsoluteUri)
                {
                    return;
                }


                wb = webBrowser1;

                foreach (HtmlElement he in wb.Document.All.GetElementsByName("xhpc_message"))
                {
                    he.SetAttribute("value", RandomString(10));
                }
                var elems = wb.Document.GetElementsByTagName("button");

                foreach (HtmlElement elem in elems)
                {
                    if (elem.InnerText == "Post")
                    {
                        elem.InvokeMember("click");
                    }
                }
                sent = true;
                postsCounter += 1;
                label2.Text = postsCounter.ToString();
                label2.Visible = true;
                if (postsCounter == 720)
                {
                    w.WriteLine(postsCounter.ToString());
                    w.WriteLine(Environment.NewLine);
                    label5.Text = DateTime.Now.ToString();
                    label5.Visible = true;
                    w.WriteLine(label5.Text.ToString());
                    w.Close();
                }
            }
            catch(Exception err)
            {
                string myerr = err.ToString();
            }
        }

        bool sent = false;
        int count = 0;

        private void timer1_Tick(object sender, EventArgs e)
        {
            try
            {
                count += 1;
                if (sent == true && count >= 60)
                {
                    count = 0;
                    sent = false;
                    webBrowser1.Navigate("https://www.facebook.com/");
                }
            }
            catch(Exception err)
            {
                string myerr = err.ToString();
            }
        }

        private StringBuilder builder;
        private static Random random = new Random((int)DateTime.Now.Ticks);
        private string RandomString(int size)
        {
            try
            {
                builder = new StringBuilder();
                char ch;
                for (int i = 0; i < size; i++)
                {
                    ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
                    builder.Append(ch);
                }
            }
            catch(Exception err)
            {
                string myerr = err.ToString();
            }
            return builder.ToString();
        }
    }
}

at System.Windows.Forms.UnsafeNativeMethods.IWebBrowser2.Navigate2(Object& URL, Object& flags, Object& targetFrameName, Object& postData, Object& headers)
   at System.Windows.Forms.WebBrowser.PerformNavigate2(Object& URL, Object& flags, Object& targetFrameName, Object& postData, Object& headers)
   at System.Windows.Forms.WebBrowser.Navigate(String urlString)
   at WebSite_Login_And_Browsing.Facebook_Post.timer1_Tick(Object sender, EventArgs e)

1 个答案:

答案 0 :(得分:1)

你永远不会禁用你的计时器。你的计数总是增加一。 您需要设置一些条件以防止它始终增加。

这是你的代码:

private void timer1_Tick(object sender, EventArgs e)
    {
        try
        {
            count += 1;
            if (sent == true && count >= 60)
            {
                count = 0;
                sent = false;
                webBrowser1.Navigate("https://www.facebook.com/");
            }
        }
        catch(Exception err)
        {
            string myerr = err.ToString();
        }
    }

您需要执行以下操作:

if(!sent) count += 1;

if(sent) count = 0 ;

if(sent) timer1.enabled = false;

取决于你想做什么。