日期:2014-05-18  浏览次数:20694 次

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