读书人

BeginInvoke异步执行的有关问题

发布时间: 2013-09-25 11:02:58 作者: rapoo

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); //界面列新

}






读书人网 >C#

热点推荐