日期:2014-05-17  浏览次数:20863 次

C# 多线程操作ui
我在新起的线程里想改变webBrowser1 的url   
网上说只能通过this.Invoke((EventHandler)delegate{
//这里webBrowser1 .Navigate("http://.....");
});


可是我的程序一直进不去this.Invoke((EventHandler)delegate{  
//这里的程序一直进不来
 });


求大神解决

------解决方案--------------------
啥意思,估计你还是没用对,google资料检查一下
------解决方案--------------------
webbrowser的操作本身就是异步的,不用再起新线程
------解决方案--------------------
Form_Load里面
Thread newThread = new Thread(()=>{
    this.Invoke((senderObject,eventArgs)=>{
        webBrowser1 .Navigate("http://.....");
    },null,null);
});
newThread.Start();

解释下:
Thread newThread = new Thread(()=>{
    //这里()=>{}是ThreadStart委托实例,即用lambda写的匿名方法
});

()=>{}里面的
this.Invoke((senderObject,eventArgs)=>{
        webBrowser1 .Navigate("http://.....");
},null,null);
就是newThread.Invoke(指定委托类型的实例,param object[]参数);
而Invoke第一个参数指定的指定委托类型的实例是EventHandler,所以(senderObject,eventArgs)=>{
        webBrowser1 .Navigate("http://.....");
    }
后面的参数null,null就是senderObject,eventArgs。