在 Windows 窗口程序中不能使用 delegate 来异步执行,请帮忙看下是什么有关问题,多谢
在 Windows 窗口程序中不能使用 delegate 来异步执行,请帮忙看下是什么问题,谢谢
Hi,
在 Windows 窗口程序中不能使用 delegate 来异步执行,请帮忙看下是什么问题,谢谢.
------解决方案--------------------
根本没明白委托的使用,其实可以使用BackgroundWork控件就可以了,参考:http://www.cnblogs.com/zhili/archive/2013/05/11/EAP.html
------解决方案--------------------
------解决方案--------------------
不懂你说的是什么意思?什么叫做“delegate 可以调用任何方法”?
如果你吃包子时吃到了沙子,你不能仅仅说“不是说包子里边只有馅吗?”。
Hi,
在 Windows 窗口程序中不能使用 delegate 来异步执行,请帮忙看下是什么问题,谢谢.
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);
}
}
------解决方案--------------------
根本没明白委托的使用,其实可以使用BackgroundWork控件就可以了,参考:http://www.cnblogs.com/zhili/archive/2013/05/11/EAP.html
------解决方案--------------------
private void testButton_Click(object sender, EventArgs e)
{
ThreadPool.QueueUserWorkItem(h=> doSomthingConsumingTimes());
}
private void doSomthingConsumingTimes() {
{
........
testButton.BeginInvoke(new Action(()=> testMethod2());
........
}
------解决方案--------------------
不懂你说的是什么意思?什么叫做“delegate 可以调用任何方法”?
如果你吃包子时吃到了沙子,你不能仅仅说“不是说包子里边只有馅吗?”。