日期:2014-05-17 浏览次数:20821 次
public partial class TestFrame : Form
{
private void testButton_Click(object sender, EventArgs e)
{
//如果是直接在按钮点击事件里面,直接调用该方法的话,会导致整个窗口都定住,不能动了。
//必须要等到 doSomthingConsumingTimes() 方法执行完,窗口才能动,才能进行其他操作。
//this.doSomthingConsumingTimes();
//这里面尝试使用网上的例子,目的是使到 button 点击的时候,
//让窗口异步调用一下 doSomthingConsumingTimes 然后,窗口还可以正常操作其他功能。
//但是,使用这个方法一运行,就出错了,不知是什么原因。
testDelegate testDelegate = new testDelegate(this.doSomthingConsumingTimes);
AsyncCallback asyncCallback = new AsyncCallback(testDelegateCallback);
testDelegate.BeginInvoke(asyncCallback, testDelegate);
}
private void doSomthingConsumingTimes() {
//这里面会同步执行一大段数据同步的操作,需要很长时间,
//在这过程里面,会调用窗口的进度条来显示进度,
}
//这里面按照例子定义了这样两个异步执行的方法
//这里面有一点与网上例子不同的是,这些 delegate 方法也是与 doSomthingConsumingTimes 方法在同一个 Form 的 class 下,不知是否定义有问题。
private delegate void testDelegate();
private void testDelegateCallback(IAsyncResult asyncResult)
{
testDelegate testDelegate = (testDelegate)asyncResult.AsyncState;
testDelegate.EndInvoke(asyncResult);
}
}
private void testButton_Click(object sender, EventArgs e)
{
ThreadPool.QueueUserWorkItem(h=> doSomthingConsumingTimes());
}
private void doSomthingConsumingTimes() {
{
........
testButton.BeginInvoke(new Action(()=> testMethod2());
........
}