Browser.ReadyState 上的致命执行错误[重复]

2024-01-21

可能的重复:
.NET“致命执行引擎错误”故障排除 https://stackoverflow.com/questions/2823440/troubleshooting-net-fatal-execution-engine-error

我的代码抛出致命执行错误。确切的错误是这样的:

运行时遇到致命错误。错误的地址 位于 0xed40646c,线程 0x2044 上。错误代码为0xc0000005。 此错误可能是 CLR 中的错​​误或不安全或不可验证的错误 用户代码的一部分。此错误的常见来源包括用户 COM 互操作或 PInvoke 的编组错误,这可能会损坏 堆。

据我所知,我没有使用不安全的用户代码。

导致问题的代码是这样的:

WebClient client = new WebClient();

string pageHtml = client.DownloadString(url);

browser.ScriptErrorsSuppressed = true;

browser.DocumentText = pageHtml;

do
 {
  Application.DoEvents();

  } while (browser.ReadyState != WebBrowserReadyState.Complete); //CRASH OCCURS HERE

现在最关键的地方来了。这段代码正在循环运行。每隔一段时间,它就会给出这个错误。有时是在第 1000 次运行时。上次是第 5545 次运行。这似乎确实是非常随机的。

我该如何解决这个问题?或者我怎样才能获得更多信息来解决这个问题?


我的解决方案基于在VB.NET中如何等待WebBrowser完全加载? https://stackoverflow.com/questions/3275515/how-to-wait-until-webbrowser-is-completely-loaded-in-vb-net/9205751#9205751

你要做的就是添加bool _pageReady变量为Completed event.

void web_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            var urlCurrent = e.Url.ToString();
            var browser = (WebBrowser)sender;

            if (!(urlCurrent.StartsWith("http://") || urlCurrent.StartsWith("https://")))
            {
                // in AJAX     
            }
            if (e.Url.AbsolutePath != browser.Url.AbsolutePath)
            {
                // IFRAME           
            }
            else
            {
                //  DOCUMENT IS LOADED 100%
                Debug.WriteLine("DocumentCompleted " + DateTime.Now.TimeOfDay.ToString());

                _pageReady = true; // Here it goes!!!! :)

                try
                {
                    mshtml.IHTMLDocument2 docs2 = (mshtml.IHTMLDocument2)web.Document.DomDocument;
                    mshtml.IHTMLDocument3 docs3 = (mshtml.IHTMLDocument3)web.Document.DomDocument;
                    mshtml.IHTMLElement2 body2 = (mshtml.IHTMLElement2)docs2.body;
                    mshtml.IHTMLElement2 root2 = (mshtml.IHTMLElement2)docs3.documentElement;

                    // Determine dimensions for the image; we could add minWidth here
                    // to ensure that we get closer to the minimal width (the width
                    // computed might be a few pixels less than what we want).
                    int width = Math.Max(body2.scrollWidth, root2.scrollWidth);
                    int height = Math.Max(root2.scrollHeight, body2.scrollHeight);

                    //get the size of the document's body
                    Rectangle docRectangle = new Rectangle(0, 0, width, height);

                    web.Width = docRectangle.Width;
                    web.Height = docRectangle.Height;

                    //if the imgsize is null, the size of the image will 
                    //be the same as the size of webbrowser object
                    //otherwise  set the image size to imgsize
                    Rectangle imgRectangle;
                    if (imgsize == null) imgRectangle = docRectangle;
                    else imgRectangle = new System.Drawing.Rectangle() { Location = new System.Drawing.Point(0, 0), Size = imgsize.Value };

                    //create a bitmap object 
                    __Bitmap = new Bitmap(imgRectangle.Width, imgRectangle.Height);

                    //Rectangle resolution = Screen.PrimaryScreen.Bounds;
                    //__Bitmap.SetResolution(resolution.Width, resolution.Height); 

                    //get the viewobject of the WebBrowser
                    IViewObject ivo = web.Document.DomDocument as IViewObject;

                    using (Graphics g = Graphics.FromImage(__Bitmap))
                    {
                        //get the handle to the device context and draw
                        IntPtr hdc = g.GetHdc();
                        ivo.Draw(1, -1, IntPtr.Zero, IntPtr.Zero,
                                 IntPtr.Zero, hdc, ref imgRectangle,
                                 ref docRectangle, IntPtr.Zero, 0);
                        g.ReleaseHdc(hdc);
                    }

                    //var randomPart = System.IO.Path.GetRandomFileName();
                    //__Bitmap.Save(@"D:\t" + randomPart + ".png");

                    if (CropRectangle != null)
                    {
                        if (CropRectangle.Width > 0 && CropRectangle.Height > 0)
                        {
                            Bitmap bmpCrop = __Bitmap.Clone(CropRectangle, __Bitmap.PixelFormat);
                            __Bitmap = bmpCrop;
                        }
                    }

                    //__Bitmap.Save(@"D:\cropped" + randomPart + ".png");

                    bitmapPointer = __Bitmap.GetHbitmap();
                }
                catch
                {
                    //System.Diagnostics.Process.GetCurrentProcess().Kill();
                }
            }
        }

也可以做类似的事情

public void HtmlCapture2()
        {
            try
            {
                if (web == null)
                    web = InitWebBrowser();

                web.Navigate(_navigateURL);

                try
                {
                    while (_pageReady == false) // YEAH!!!!!! IT IS WORKING!!!!
                    {
                        System.Windows.Forms.Application.DoEvents();
                     }
                    //Thread.Sleep(WaitForWebsite); --- It works but....
                    //while (web.ReadyState != WebBrowserReadyState.Complete) --- it gives an ERROR
                    //    System.Windows.Forms.Application.DoEvents();
                }
                catch (Exception)
                {
                }
            }
            catch (Exception)
            {
            }
        }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Browser.ReadyState 上的致命执行错误[重复] 的相关文章

  • 如何在 DataColumn.Expression 中使用 IF/ELSE 或 CASE?

    我有一个包含 1 列的表 状态 我想添加另一列名为 Action 的列 其值如下 如果 Status Yes 则 Action Go 否则 Action Stop 我使用以下代码添加到 操作 列中 但它不起作用 myDataTable Co
  • 在 C/C++ 中获得正模数的最快方法

    通常在我的内部循环中 我需要以 环绕 方式索引数组 因此 例如 如果数组大小为 100 并且我的代码要求元素 2 则应该给它元素 98 高级语言 例如 Python 可以简单地使用my array index array size 但由于某
  • 何时使用 =default 使析构函数默认?

    尽管对构造函数使用 default 对我来说很清楚 即强制编译器在其他构造函数存在时创建默认构造函数 但我仍然无法理解这两种类型的析构函数之间的区别 那些使用 default 的 那些没有显式定义并由编译器自动生成的 我唯一想到的是 gro
  • 使用 Enumerable.OfType() 或 LINQ 查找特定类型的所有子控件

    Existed MyControl1 Controls OfType
  • ASP.Net Core 内容配置附件/内联

    我正在从 WebAPI 控制器返回一个文件 Content Disposition 标头值自动设置为 附件 例如 处置 附件 文件名 30956 pdf 文件名 UTF 8 30956 pdf 当它设置为附件时 浏览器将要求保存文件而不是打
  • vs2008 c#:Facebook.rest.api如何使用它来获取好友列表?

    如何在此基础上取得进一步的进步 获取好友列表的下一步是什么 string APIKey ConfigurationManager AppSettings API Key string APISecret ConfigurationManag
  • 如何获取 QTableView 的标题列表?

    我有一个QTableView我的对话框中的对象 我需要访问该表的水平标题并将它们放入QStringList object 尽管进行了大量搜索 但我在 Qt 文档中找不到如何获取此标头列表 编辑 我发现的最接近的地方是this https w
  • 从 WebBrowser 控件 C# 获取滚动值

    我试图在 WebBrowser 控件中获取网页的 Y 滚动索引 但无法访问内置滚动条的值 有任何想法吗 对于标准模式下的 IE 使用文档类型 正如你所说 scrollTop是的财产元素 而不是 HtmlDocument htmlDoc th
  • std::forward_as_tuple 将参数传递给 2 个构造函数

    我想传递多个参数以便在函数内构造两个对象 以同样的方式std pair
  • 检查 RoutedEvent 是否有任何处理程序

    我有一个自定义 Button 类 当单击它时 打开特定窗口 它总是执行相同的操作 我添加了一个可以在按钮的 XAML 中分配的 Click 事件 就像常规按钮一样 当它被单击时 我想执行 Click 事件处理程序 如果已分配 否则我想执行默
  • 将二进制数据从 C# 上传到 PHP

    我想将文件从 Windows C 应用程序上传到运行 PHP 的 Web 服务器 我知道 WebClient UploadFile 方法 但我希望能够分块上传文件 以便我可以监控进度并能够暂停 恢复 因此 我正在读取文件的一部分并使用 We
  • 无法在内存位置找到异常源:cudaError_enum

    我正在尝试确定 Microsoft C 异常的来源 test fft exe 中 0x770ab9bc 处的第一次机会异常 Microsoft C 异常 内存位置 0x016cf234 处的 cudaError enum 我的构建环境是 I
  • 每个租户的唯一用户名和电子邮件

    我正在使用以下代码编写多租户应用程序ASP NET Core 2 1 我想覆盖默认的与用户创建相关的验证机制 目前我无法创建多个具有相同的用户UserName My ApplicationUser模型有一个名为TenantID 我想要实现的
  • 在 EnvDTE 中调试时捕获 VS 局部变量

    是否可以使用 EnvDTE 进行 vsix Visual Studio 扩展来捕获本地和调试窗口使用的调试数据 或者可以通过其他方法吗 我想创建一个自定义的本地窗口 我们可以修改它以根据需要显示一些较重的内容 而无需为高级用户牺牲原始的本地
  • cout 和字符串连接

    我刚刚复习了我的 C 我尝试这样做 include
  • 您是否将信息添加到每个 .hpp/.cpp 文件的顶部? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 创建新的 C 头文件 源文件时 您会在顶部添加哪些信息 例如 您是否添加日期 您的姓名 文件描述等 您是否使用结构化格式来存储此信息 e g F
  • C++ Streambuf 方法可以抛出异常吗?

    我正在尝试找到一种方法来获取读取或写入流的字符数 即使存在错误并且读 写结束时间较短 该方法也是可靠的 我正在做这样的事情 return stream rdbuf gt sputn buffer buffer size 但如果streamb
  • 矩阵到数组 C#

    这将是转换方阵的最有效方法 例如 1 2 3 4 5 6 7 8 9 into 1 2 3 4 5 6 7 8 9 in c 我在做 int array2D new int 1 2 3 4 5 6 7 8 9 int array1D new
  • 将 char[][] 转换为 char** 会导致段错误吗?

    好吧 我的 C 有点生疏了 但我想我应该用 C 来做我的下一个 小 项目 这样我就可以对其进行抛光 并且我已经有不到 20 行的段错误了 这是我的完整代码 define ROWS 4 define COLS 4 char main map
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte

随机推荐

  • 替换 CLLocationManager 的“目的”属性

    在 iOS 6 中 purposeCLLocationManager 的属性 用于描述使用位置服务的原因 property copy nonatomic NSString purpose 已被弃用 Apple 提出了哪种替代方案 如果有 替
  • 3 个并排的响应式 DIV 框 - 不在一起

    嗨 我需要帮助解决这个问题 我有 3 个 div 无论屏幕有多大或多小 都需要并排放置 但问题是 一旦屏幕宽度低于 400px 那么最后一个 div 就会位于其他 div 的下方 我怎样才能让它们保持内联 同时响应灵敏且居中 而不会对媒体查
  • 在特定模式上运行inspectdb

    我想用检查数据库 https docs djangoproject com en dev ref django admin inspectdb以便为新引入的表建立相应的模型 但看起来这个命令只查找public架构 而新表位于另一个架构中 是
  • Expo 应用程序卡在启动屏幕上 - 没有给出错误

    我的应用程序工作得很好 直到我开始尝试让它与 Firebase 一起工作 它现在冻结在启动屏幕上 没有给我任何错误 我尝试从 GitHub 中提取之前的版本 创建一个全新的 expo 项目并复制代码 然后重新安装所有软件包 但都不起作用 有
  • 当同一组件加载不同数据时,不会调用 ngOnInit

    我有一个 Angular 2 应用程序 并且像其他人一样使用路由器在视图之间导航 以下是我的特定组件的路径 path home view1 viewID component ViewComponent children path pane
  • C++ Class Typedef Struct 不命名类型

    我正在尝试在我的 C 程序中使用 typedef 结构 我开始编写以下代码 直到尝试向我的类添加返回模板 typedef 结构指针的方法时收到错误 结构源 h template
  • svn:无法打开请求的 SVN 文件系统

    我尝试在LAMPP环境中设置svn 我的 svn 存储库位于 var svn repos 以及repos目录属于root root 现在 当运行命令时 svn import test http localhost svn m init 我看
  • Cleartool - 列出对象及其标签

    我想递归地列出所有对象 包括文件和目录 及其标签 当我运行以下命令时 它只写入规则 它不会在任何对象上写入所有标签 cleartool ls r l view stable MYVOB MyProject 结果 版本 view stable
  • 调度程序代码在什么上下文中运行?

    调度程序代码有两种情况schedule 被调用 当进程主动调用schedule 定时器中断调用schedule 对于情况2 我认为schedule 在中断上下文中运行 但是第一种情况怎么样 它是否在调用它的进程的上下文中运行 还有其他场景会
  • 使用@PropertySource注释时@Value未解析。如何配置PropertySourcesPlaceholderConfigurer?

    我有以下配置类 Configuration PropertySource name props value classpath app config properties ComponentScan service public class
  • 如何从 numpy.datetime64 获取unix时间戳

    如何从 numpy datetime64 或 numpy datetime 获取 UNIX 时间 例如 np datetime 2012 08 08 13 37 00 为了解释单位 我认为你需要这样做 def get unixtime dt
  • 将字符串大写并返回局部变量

    我正在尝试创建一个将字符串大写的过程 但我收到垃圾值和来自 gcc 的警告 提示我正在返回局部变量的地址 来自Python 我对这个问题感到困惑 不想在中使用东西
  • 由于使用非公共 API,二进制文件被拒绝(谷歌分析 iOS v2)

    我最近有一个应用程序被拒绝 原因是 非公开API使用 应用程序不允许访问UDID 并且不得使用UIDevice的uniqueIdentifier方法 请更新您的应用程序和服务器 以便将用户与 iOS 6 中引入的供应商或广告标识符相关联 我
  • 在 Woocommerce 迷你购物车/购物车中设置自定义计算的商品价格

    目前我有一些根据不同情况定制的产品价格计算 当客户将产品添加到购物车时 自定义价格将在会话数据中设置 cart item data my price 我实现了使用add filter woocommerce add cart item 功能
  • 在 JFrame 上绘制画布

    我正在尝试用 Canvas 绘制简单的形状 在这堂课中我已经设置了绘画 public class Game extends Canvas FIELDS public int WIDTH 1024 public int HEIGHT WIDT
  • 未处理的异常:绑定尚未初始化

    i am facing this error for 3 days i have just used firebase db for authentication and i don t know how to solve it 根据他们的
  • 多个消费者从单个 kafka 分区消费

    我读到以下内容卡夫卡文档 https kafka apache org intro intro consumers Kafka 中实现消费的方式是将日志中的分区划分到消费者实例上 以便每个实例在任何时间点都是 公平份额 分区的独占消费者 K
  • 如何从 docker-compose 命令运行 2 个不同的命令:

    我想从 docker compose 为我的服务运行 2 个不同的命令 bash脚本 sh 配置 etc config yaml 目前 我的 docker compose 如下所示 我希望 bash 脚本在配置命令之后运行 docker c
  • 维基百科Python API

    我正在尝试使用 Python 的维基百科 API 查看维基百科页面中的目录 这是我的代码 gt gt gt import wikipedia gt gt gt ny wikipedia page New York gt gt gt ny s
  • Browser.ReadyState 上的致命执行错误[重复]

    这个问题在这里已经有答案了 可能的重复 NET 致命执行引擎错误 故障排除 https stackoverflow com questions 2823440 troubleshooting net fatal execution engi