读书人

使用了异步调用和没使用一样界面没反应

发布时间: 2012-02-01 16:58:19 作者: rapoo

使用了异步调用和没使用一样界面没反应.为什么
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(); 

读书人网 >C#

热点推荐