设置控件的值

        /// <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. [深入JUnit] 测试运行的入口

    阅读前提 了解JUnit 对JUnit的内部实现有兴趣 不妨看看[深入JUnit] @Before, @After, @Test的秘密] 代码版本: junit 4.12代码搜索工具: http:// ...

  2. 【手记】WebBrowser响应页面中的blank开新窗口及window.close关闭本窗体

    注:本文适用.net 2.0+的winform项目 目的: 点击页面中的target="_blank"链接时,弹出新窗体 页面中有window.close()操作时,关闭窗体 上述 ...

  3. mybatis笔记1 基本的配置和操作

    mybatis比较轻量,适合开发比较小型的或者业务比较复杂的系统: 相对于hibernate来说可以灵活的写sql,更灵活的处理遇到的业务逻辑: 可以说hibernate是pojo实体对db的orm映 ...

  4. Spring学习系列(一) Spring简介

    Spring简介 之前一直想写点东西,可一直没有开始实施,各种原因都有,最大原因可能还是自己太懒了,嘿嘿.最近在看Spring in action这本书,为了能让自己坚持下去把书看完,这次决定同步的在 ...

  5. Effective java笔记(一),创建与销毁对象

    1.考虑用静态工厂方法代替构造器 类的一个实例,通常使用类的公有的构造方法获取.也可以为类提供一个公有的静态工厂方法(不是设计模式中的工厂模式)来返回类的一个实例.例如: //将boolean类型转换 ...

  6. SpringMVC的执行流程(二)

    文字解析: 1.客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配 DispatcherServlet的请求映射路径(在web.xml中指定),web容器将请求转交 ...

  7. Web 开发中很实用的10个效果【附源码下载】

    在工作中,我们可能会用到各种交互效果.而这些效果在平常翻看文章的时候碰到很多,但是一时半会又想不起来在哪,所以养成知识整理的习惯是很有必要的.这篇文章给大家推荐10个在 Web 开发中很有用的效果,记 ...

  8. iosselect:一个js picker项目,在H5中实现IOS的下拉效果

    iosselect是在webapp下的一个picker组件,可以轻松实现各类选择器效果.比如地区选择 时间选择 日期选择等. 下面是一个地址选择器demo截图,可以访问:http://zhoushen ...

  9. iscroll5实现一个下拉刷新上拉加载的效果

    直接上代码!!! <!DOCTYPE html><html><head lang="en"> <meta charset="UT ...

  10. Linux Distribution / ROM

    Linux发行版 http://unix.stackexchange.com/questions/87011/how-to-easily-build-your-own-linux-distro 这个文 ...