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

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;}; //界面更新