private void button1_Click(object sender, System.EventArgs e)
{
DoneDelegate proDone=new DoneDelegate(Done);
proDone.BeginInvoke(null,null);

}
public delegate void DoneDelegate();
private void Done ()
{
string aa="00";
}
为什么,我在执行button1_Click中的proDone.BeginInvoke以后,不执行Done ()函数

解决方案 »

  1.   

    proDone.BeginInvoke(proDone); 试试看,别心急.
    你根本没告诉程序你要执行Done()
      

  2.   

    不好意思,是这样的
    private void button1_Click(object sender, System.EventArgs e)
    {
    DoneDelegate proDone=new DoneDelegate(Done);
    proDone.BeginInvoke(Done,null,null);

    }
    public delegate void DoneDelegate();
    private void Done ()
    {
    string aa="00";
    }
    为什么,我在执行button1_Click中的proDone.BeginInvoke以后,不执行Done ()函数
      

  3.   

    private void button1_Click(object sender, System.EventArgs e)
    {
    DoneDelegate proDone=new DoneDelegate(Done);
    proDone.BeginInvoke(null,null);

    }
    public delegate void DoneDelegate();
    private void Done ()
    {
    string aa="00";
    }
    是会执行的.proDone.BeginInvoke(Done,null,null); 这个编译都不能通过,你怎么执行?
      

  4.   

    但是我这样就是不执行Done ()函数啊
      

  5.   

    我跟踪但是就是不执行Done ()函数啊,一到执行proDone.BeginInvoke(null,null);完后,就退出了
      

  6.   

    DoneDelegate proDone=new DoneDelegate(Done);
    proDone.BeginInvoke(null,null);
    ============================
    代码没问题,你是什么程序winform or webform 如果是winform 把
    private void Done ()
    {
    string aa="00"; ===〉改成 MessageBox.Show("ok");试试看有没有效果 }
      

  7.   

    对啊;一到执行proDone.BeginInvoke(null,null);完后,就退出了;但是被执行的委托是异步的;只有主函数执行完了委托才执行;你在 string aa="00";处设置一个断点即可。
      

  8.   

    那是有问题的.
    为了好看,把你的稍稍的修改了一下(不修改也是可以的):
    public delegate string DoneDelegate();
    private string Done ()
    {
    string aa="00";
    return aa;
    }
    private void button1_Click(object sender, System.EventArgs e)
    {
    DoneDelegate proDone=new DoneDelegate(Done);
    string endDD = proDone();
    this.richTextBox1.Text += DateTime.Now.ToString("HH:mm:ss")+": 异步委托开始.\n";
    IAsyncResult myResult = (IAsyncResult)proDone.BeginInvoke(null,null);
    while(!myResult.IsCompleted)  //不要也可以的,调试而已.
    {
    this.richTextBox1.Text += DateTime.Now.ToString("HH:mm:ss")+": 异步委托执行中....\n";
    }
    endDD = proDone.EndInvoke(myResult);
    this.richTextBox1.Text += DateTime.Now.ToString("HH:mm:ss")+": 异步委托结束.\n返回值:"+endDD;
    }