使用了异步调用和没使用一样界面没反应.为什么
button1_Click没有使用异步.运行时界面会卡10秒.button2_Click使用了异步.界面一样卡10秒.谁能解答一下为什么吗?异步不是在另一个线程中执行的吗?
- C# code
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Threading;namespace bar4{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private delegate int myde(int a); private void button1_Click(object sender, EventArgs e) { myde my = new myde(mymethod); textBox1.Text= my(1000).ToString(); } private int mymethod(int s) { Thread.Sleep(10000); return s * s; } private void button2_Click(object sender, EventArgs e) { myde my = new myde(mymethod); IAsyncResult async=my.BeginInvoke(5,null,null); int result = my.EndInvoke(async); textBox1.Text = result.ToString(); //this.Invoke(my, new Object[] { 1000 }); } }}
[解决办法]
原因很简单你,你又begin又end当然它等于是没有异步了
想法于立即调用Join()一样,他会让当前线程阻塞,直到调用后果新返回
到当前线程为止
[解决办法]
你这样不叫异步啊,异步是另开一个线程,独立于主线程运行。
http://blog.csdn.net/lanwilliam/archive/2008/05/05/2390939.aspx
[解决办法]
楼主是使用委托来做的标准异步操作.
你把End的拿起走,注意到你写的参数用了两个null其中前一个就是一个
委托你在这个委托中调用End的方法一切就OK.
[解决办法]
开线程吧
- C# code
Thread _threadShow = new Thread();if(_threadShow != null && _threadShow.ThreadState == ThreadState.Running){ return;}_threadShow = new Thread(new ThreadStart(mymethod));_threadShow.Start();