c# 调用 Geckofx

oldhunter 2016-07-11 03:54:29
c# 调用 Geckofx:

1、在子线程创建 Geckofx,调用失败:COM 对象与其基础 RCW 分开后就不能再使用

2、在界面线程创建(MainForm.Invoke 方式调用方法):创建成功,调用成功。

3、webBrowser.Document.SelectSingle(xpath) 时出错(也是MainForm.Invoke 方式调用方法):尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

是哪的原因呢?
...全文
306 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
a472544436 2019-07-25
  • 打赏
  • 举报
回复
Nuget工具先选windows和cord最后才是45,这样才能安装成功
event_a 2016-07-14
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
Geckofx 其实相对于同类的框架,已经算是非常稳定得了。 使用 vs 以 Nuget 方式也能加载一个相对新的版本,而且设置好必要添加到工程中的几十个文件(比手动下载和设置,方便多了)。 最主要地(不要随便告诉别人啊),Geckofx可以自由地设置cookie 保存的地址,从而可以在一个机器上、同一套c#代码的不同进程,模拟几十个甚至上百个不同的登录用户。(这个不要随便告诉别人啊~~!)
求指教,最近一个项目有这个需求,但是自带的无法实现,请求怎么设置, 找了好久资料都没看到怎么设置。。
oldhunter 2016-07-11
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
从 Nuget 加载到 c# 工程中的 Geckofx 稳定版本,现在是 v45.0 版。 你知道的,网上很找到的一些中文的 Geckofx 的介绍文章,都是多少年前“古代”的过时文章,可能都是 1.x 版本的文章。
多谢 sp!@以专业开发人员为伍 1、在这里(https://bitbucket.org/geckofx/geckofx-45.0/downloads)下载了 geckofx 45,去哪里下 xulrunner 45? 我的VS版本太低,装不上 Nuget (要求vs2015或vs2013),无法同步。 2、我的代码中,相关事件其实已经订阅,如 DocumentCompleted、CreateWindow、Navigating,在UI线程测试正常,放到工作线程,遇到上面的问题。就是这一句出错:GeckoNode node = webBrowser.Document.SelectSingle(xpath);,异常:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。 其实,我测试一个非AJAX的URL,是正常的(可排除:跨线程调用,导致异常)。换了一个AJAX的URL,就不行了,而且,同一个URL放到UI线程环境中,又没有问题(可排除:xpath 查询不存在,导致异常)。 感觉C#调用COM的框架,“异常处理”是一个硬伤。
gengchenhui 2016-07-11
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
Geckofx 其实相对于同类的框架,已经算是非常稳定得了。 使用 vs 以 Nuget 方式也能加载一个相对新的版本,而且设置好必要添加到工程中的几十个文件(比手动下载和设置,方便多了)。 最主要地(不要随便告诉别人啊),Geckofx可以自由地设置cookie 保存的地址,从而可以在一个机器上、同一套c#代码的不同进程,模拟几十个甚至上百个不同的登录用户。(这个不要随便告诉别人啊~~!)
sp的家底儿都出来了。。。
  • 打赏
  • 举报
回复
从 Nuget 加载到 c# 工程中的 Geckofx 稳定版本,现在是 v45.0 版。 你知道的,网上很找到的一些中文的 Geckofx 的介绍文章,都是多少年前“古代”的过时文章,可能都是 1.x 版本的文章。
  • 打赏
  • 举报
回复
Geckofx 其实相对于同类的框架,已经算是非常稳定得了。 使用 vs 以 Nuget 方式也能加载一个相对新的版本,而且设置好必要添加到工程中的几十个文件(比手动下载和设置,方便多了)。 最主要地(不要随便告诉别人啊),Geckofx可以自由地设置cookie 保存的地址,从而可以在一个机器上、同一套c#代码的不同进程,模拟几十个甚至上百个不同的登录用户。(这个不要随便告诉别人啊~~!)
Poopaye 2016-07-11
  • 打赏
  • 举报
回复
webBrowser是个控件,我不清楚你为啥要在别的地方创建 注意下geckofx的版本和firefox是否一致
  • 打赏
  • 举报
回复
要处理控件,自然应该在 UI 线程来处理。 至于说最后一个访问异常,你应该判断一下 webBrowser.Document 是不是 null。Geckofx 在对象检测和抛出异常方面不太规矩,经常误报(或这是带病工作直到最终底层崩溃)。当你 Navigate(url) 的时候,应该是先注册委托,在 webBrowser.Navigated 事件(大概是这个名字)触发时才进行随后的工作,而不是在 Navigate 语句之后就去执行。
oldhunter 2016-07-11
  • 打赏
  • 举报
回复
Geckofx 不可以在非UI线程下使用吗?

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧