设置控件的值

        /// <summary>
        /// 根据ID,NAME双重判断并设置值
        /// </summary>
        /// <param name="tagName"></param>
        /// <param name="id"></param>
        /// <param name="value"></param>
        private void SetTxt(string tagName, string name, string id, string value)
        {
            HtmlDocument docx = <strong><font color=.Document;
            foreach (HtmlElement item in docx.GetElementsByTagName(tagName))
            {

                if (item.GetAttribute("name") != null && item.GetAttribute("name") == name || item.Id == id)
                {
                    try
                    {
                        item.Focus();
                        item.SetAttribute("value", value);
                    }
                    catch
                    {
                        item.SetAttribute("value", value);
                    }

                }
            }
        }

返回指定WebBrowser中图片<IMG></IMG>中的图内容   需要引用MsHtml

/// <summary>
/// 返回指定WebBrowser中图片<IMG></IMG>中的图内容
/// </summary>
/// <param name="WebCtl">WebBrowser控件</param>
/// <param name="ImgeTag">IMG元素</param>
/// <returns>IMG对象</returns>
private Image GetWebImage(WebBrowser WebCtl, HtmlElement ImgeTag)
{
    HTMLDocument doc = (HTMLDocument)WebCtl.Document.DomDocument;
    HTMLBody body = (HTMLBody)doc.body;
    IHTMLControlRange rang = (IHTMLControlRange)body.createControlRange();
    IHTMLControlElement Img = (IHTMLControlElement)ImgeTag.DomElement; //图片地址
    Image oldImage = Clipboard.GetImage();
    rang.add(Img);
    rang.execCommand("Copy", false, null);  //拷贝到内存
    Image numImage = Clipboard.GetImage();
    try
    {
        Clipboard.SetImage(oldImage);
    }
    catch { }
    return numImage;
}

一个通用webbrowser类,封装常用方法

public partial class htmlElement
    {
        //根据Name获取元素
        public HtmlElement GetElement_Name(WebBrowser wb, string Name)
        {
            HtmlElement e = wb.Document.All[Name];
            return e;
        }

        //根据Id获取元素
        public HtmlElement GetElement_Id(WebBrowser wb, string id)
        {
            HtmlElement e = wb.Document.GetElementById(id);
            return e;
        }

        //根据Index获取元素
        public HtmlElement GetElement_Index(WebBrowser wb, int index)
        {
            HtmlElement e = wb.Document.All[index];
            return e;
        }

        // 据Type获取元 ,在没有NAME和ID的情况下使用
        public HtmlElement GetElement_Type(WebBrowser wb, string type)
        {
            HtmlElement e = null;
            HtmlElementCollection elements = wb.Document.GetElementsByTagName("input");
            foreach (HtmlElement element in elements)
            {
                if (element.GetAttribute("type") == type)
                {
                    e = element;
                }
            }
            return e;
        }
        // 据Type获取元 ,在没有NAME和ID的情况下使用,并指定是同类type的第 个,GetElement_Type()升级版
        public HtmlElement GetElement_Type_No(WebBrowser wb, string type, int i)
        {
            ;
            HtmlElement e = null;
            HtmlElementCollection elements = wb.Document.GetElementsByTagName("input");
            foreach (HtmlElement element in elements)
            {
                if (element.GetAttribute("type") == type)
                {
                    if (j == i)
                    {
                        e = element;
                    }
                    j++;
                }
            }
            return e;
        }
        //获取form表单名name,返回表单
        public HtmlElement GetElement_Form(WebBrowser wb, string form_name)
        {
            HtmlElement e = wb.Document.Forms[form_name];
            return e;
        }

        //设置元素value属性的值
        public void Write_value(HtmlElement e, string value)
        {
            e.SetAttribute("value", value);
        }

        //执行元素的方法,如:click,submit(需Form表单名)等
        public void Btn_click(HtmlElement e, string s)
        {

            e.InvokeMember(s);
        }
    }

多线程执行webbrowser的方法:
webbrowser 只支持STA模式

private void ThreadWebBrowser(string url)
{
   Thread tread = new Thread(new ParameterizedThreadStart(BeginCatch));
   tread.SetApartmentState(ApartmentState.STA);//注意创建的线程单元
   tread.Start(url);
}

private void BeginCatch(object obj)
{
     string url = obj.ToString();
     WebBrowser wb = new WebBrowser();
     wb.ScriptErrorsSuppressed = true;
     //在这里Navigate一个空白页面 必须
     wb.Navigate("about:blank");
     string htmlcode = "";//这里赋值 HTML字符串数据
     wb.Document.Write(htmlcode);
     //执行其他操作
}

C# Webbrowser 常用方法及多线程调用的更多相关文章

  1. dump、libeay32.dll、gsoap、webserver多线程调用gsoap产生崩溃

    问题:调用webserver接口出现dump文件,dump文件指向libeay32.dll有问题,产生崩溃的原因是gsoap多线程问题,多线程调用时需要程序启动的地方调用如下函数进行多线程初始化: i ...

  2. C# 多线程调用静态方法或者静态实例中的同一个方法-方法内部的变量是线程安全的

    C#  多线程调用静态方法或者静态实例中的同一个方法-方法内部的变量是线程安全的 using System;using System.Threading;using System.Threading. ...

  3. C# winForm webBrowser页面中js调用winForm类方法(转)

      有时我们在winform项目中嵌入了网页,想通过html页面调用后台方法,如何实现呢?其实很简单,主要有三部:   1.在被调用方法类上加上[ComVisible(true)]标签,意思就是当前类 ...

  4. 【转】 Pro Android学习笔记(七一):HTTP服务(5):多线程调用HttpClient

    目录(?)[-] 应用共享HttpClient对象的同步问题 创建共享HttpClient代码 创建共享对象 创建可共享的HttpClient对象 使用共享HttpClient对象的代码 基础代码 修 ...

  5. 多线程调用有参数的方法---c# Thread 与 Task

    C#实现多线程的方式:Task——任务   简介 .NET 4包含新名称空间System.Threading.Tasks,它 包含的类抽象出了线程功能. 在后台使用ThreadPool. 任务表示应完 ...

  6. Tess4j/Tess4j 多线程调用 过程中报错问题记录 Invalid memory access

    最近使用 Tess4j 做一些 OCR图片文字识别的代码. 然后想当然的将这个 ITesseract ocr_robot = new Tesseract(); 作为了工具类做成了成员变量. 当多线程调 ...

  7. delphi中WEBBrowser网页html相互调用(一)

    1.基本操作1.1.激活 var doc,url:Olevariant ; begin url:='about:blank' ;//或者一个有实际意义的url WebBrowser1.Navigate ...

  8. C# WebBrowser.DocumentCompleted 多次调用解决方法

    大概出现了以下几种情况. 1.WebBrowser载入一个页面后DocumentCompleted事件会执行两次,但这两次的ReadyState状态不一样,分别是Intercative和Complet ...

  9. C# 使用委托实现多线程调用窗体的四种方式

    1.方法一:使用线程 功能描述:在用c#做WinFrom开发的过程中.我们经常需要用到进度条(ProgressBar)用于显示进度信息.这时候我们可能就需要用到多线程,如果不采用多线程控制进度条,窗口 ...

随机推荐

  1. SQL Server 2012 清理日志 截断日志的方法

    MEDIA数据库名 ALTER DATABASE MEDIA SET RECOVERY SIMPLE WITH NO_WAIT ALTER DATABASE MEDIA SET RECOVERY SI ...

  2. JavaScript原型OOP——你上车了吗?

    .title-bar { width: 80%; height: 35px; padding-left: 35px; color: white; line-height: 35px; font-siz ...

  3. WPF DataGrid 行选中相关

    DataGrid选中行是有自带SelectionChanged的,可是当需要重复选中同一行时,该事件就不会触发了. 后来反复查资料找到了DataGrid上有个DataGridRow. DataGrid ...

  4. Monkey Patch/Monkey Testing/Duck Typing/Duck Test

    Monkey Patch Monkey Testing Duck Typing Duck Test

  5. IT基础架构规划方案一(网络系统规划)

    背景                   某集团经过多年的经营,公司业务和规模在不断发展,公司管理层和IT部门也认识到通过信息化手段可以更好地支撑公司业务运营.提高企业生产和管理效率.同时随着新建办公 ...

  6. 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.0.1

    HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...

  7. Hibernate4.2.4入门(二)——一对多的映射关系

    一.前言 前面我们已经学过hibernate的基础,学会增删改查简单的操作,然而我们数据库中存在着1对多,多对1,多对多的关系,hibernate又是基于ORM基础上的开源框架,可以让我们不用去编写S ...

  8. 实现下来ScrollView放大轮播图

    创建工程,创建一个UIScrollView属性,并遵循其协议: #define kWidth self.view.frame.size.width//屏幕宽 #define kHeight self. ...

  9. Java之this关键字的用法

    Java 中的 this 关键字指当前的对象,可以直接用其调用当前对象的成员变量,也可以直接用其调用当前对象的成员方法,这是我们常见的场景,那么有没有其它的情况呢! this 还可以在无参的构造方法中 ...

  10. vim使用笔记

    vim的配置文件.vimrc  一般有2个位置 1是在/目录下 2是在-目录下 如果在-目录下有了配置文件 那么将不去读取/目录下面的配置文件 如果你不知道现在使用的vim 使用的是哪个目录下面的配置 ...