zoukankan      html  css  js  c++  java
  • 解决vs2005"how to make crossthread calls"超简单实例

    在学习WebRequest Web Response对header操作时,涉及到异步操作,按实例运行出错,vs2005提示“how to make cross-thread calls...”,查了一下资料。将原来的代码
    using System;
    using System.IO;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Net;

    namespace Accessing_the_internet
    {
        
    public partial class Form1 : Form
        
    {
            
    public Form1()
            
    {
                InitializeComponent();

                WebRequest wrq 
    = WebRequest.Create("http://www.123de6.cn");
                wrq.BeginGetResponse(
    new AsyncCallback(OnResponse), wrq);
            }

            
    protected void OnResponse(IAsyncResult ar)
            
    {
                WebRequest wrq
    =(WebRequest)ar.AsyncState;
                WebResponse wrs
    =wrq.EndGetResponse(ar);
                
                
    //read the response
                WebHeaderCollection whc = wrs.Headers;
                MethodInvoker mi
    =new MethodInvoker()
                
                
    for (int i = 0; i < whc.Count; i++)
                
    {
                    listBox1.Items.Add(
    "Header"+ whc.GetKey(i)+" : " +whc[i]);
                }

            }




        }


    }

    改为这样,就可以实现对主线程listbox的操作。
    using System;
    using System.IO;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Net;

    namespace Accessing_the_internet
    {
        
    public partial class Form1 : Form
        
    {
            WebHeaderCollection whc;
            
    public Form1()
            
    {
                InitializeComponent();

                WebRequest wrq 
    = WebRequest.Create("http://www.123de6.cn");
                wrq.BeginGetResponse(
    new AsyncCallback(OnResponse), wrq);
            }

            
    protected void OnResponse(IAsyncResult ar)
            
    {
                WebRequest wrq
    =(WebRequest)ar.AsyncState;
                WebResponse wrs
    =wrq.EndGetResponse(ar);
                
                
    //read the response
                whc = wrs.Headers;
                MethodInvoker mi 
    = new MethodInvoker(controla);
                
    this.BeginInvoke(mi);
                
                
            }

            
    private void controla()
            
    {
                
    for (int i = 0; i < whc.Count; i++)
                
    {

                    listBox1.Items.Add(
    "Header" + whc.GetKey(i) + " : " + whc[i]);
                }

            }

                
                
                
            }

        
    }
  • 相关阅读:
    <JSP> 入门
    <Html> 标签
    <MyBatis>入门八 工作原理
    <MyBatis>入门七 缓存机制
    <Zookeeper>入门 概念
    <SpringMvc>入门七 拦截器
    <SpringMvc>入门六 异常处理
    <Ajax> 入门
    <设计模式> 代理模式 Proxy Pattern
    <SpringMvc>入门五 文件上传
  • 原文地址:https://www.cnblogs.com/meta/p/1090251.html
Copyright © 2011-2022 走看看