首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

BeginInvoke异步执行的有关问题

2013-09-25 
BeginInvoke异步执行的问题我现在做一个winform程序,有个要读数据的方法,因为时间可能较长,所以想用异步执

BeginInvoke异步执行的问题
   我现在做一个winform程序,有个要读数据的方法,因为时间可能较长,所以想用异步执行的方法去处理这个方法,代码如下:


           this.BeginInvoke(new dlgGetData(getData), url, textBox1);

然后我想测下是不是异步执行的,就在getData这个方法里写了System.Threading.Thread.Sleep(5000);  
    结果出现的是界面假死5秒后恢复正常。这不就是没有异步执行吗?为什么会这样?异步执行不就是创建程序创建个新的线程去处理的吗?应该怎么达到我想要的效果?请高人回答~
[解决办法]
this.BeginInvoke会阻塞当前窗体进程
[解决办法]
this 是主UI线程
[解决办法]
用异步回调执行,就不会.开或者你用错了.
[解决办法]
给你写了一个简单的例子,照着改改就成你要的了.



        private void Form1_Load(object sender, EventArgs e)
        {
            Action<string> action = new Action<string>(DoWork);
            AsyncCallback callback = new AsyncCallback(Callback);
            action.BeginInvoke("你要传的参数", callback, action);
        }

        protected void Callback(IAsyncResult ar)
        {
            Action<string> dlgt = (Action<string>)ar.AsyncState;
            dlgt.EndInvoke(ar);
        }

        protected void DoWork(string msg)
        {
            Thread.Sleep(1000);//耗时操作

            Action<string> action=delegate{ label1.Text=msg;}; //界面更新


            label1.Invoke(action,msg); //界面列新
                
        }






热点排行