为什么我';m正在获取异常[System.Runtime.InteropServices.COMException

本文关键字:异常 System Runtime COMException InteropServices 获取 为什么 | 更新日期: 2023-09-27 18:28:19

异常发生在计时器tick事件中。在变量postsCounter大约为50之后,我在计时器滴答事件中得到了异常,它在计时器滴答活动中得到了catch。

不确定发生在哪条线上以及为什么。在不使用try-and-catch和断点的情况下,当程序运行时,我在程序中看到一个断点。当计数器达到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)

为什么我';m正在获取异常[System.Runtime.InteropServices.COMException

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

这是您的代码:

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;

取决于你想做什么。