异步事件未输出到控制台

时间:2013-06-14 21:07:33

标签: c# multithreading asynchronous

我刚创建了我的第一个多线程程序,但它无效。以下是我能想出的最小的完整程序,它描绘了我想要做的事情。

基本上,我创建了:一个不带参数并返回字符串的委托;与上述委托的方法签名匹配的三种方法(FirstMessageSecondMessageThirdMessage);以及包含三种方法的此委托类型的事件。

最后,我创建了一个方法Start,它异步运行事件中的每个方法并显示它们返回的值。但是,该程序没有任何输出。我误解了什么吗?

以下是代码:

using System;

class Program
{
    delegate string Message();
    static event Message MyMessage;

    static string FirstMessage()
    {
        System.Threading.Thread.Sleep(1000);
        return "Message 1";
    }
    static string SecondMessage()
    {
        System.Threading.Thread.Sleep(2000);
        return "Message 2";
    }
    static string ThirdMessage()
    {
        System.Threading.Thread.Sleep(3000);
        return "Message 3";
    }

    static void Start()
    {
        foreach (Message m1 in MyMessage.GetInvocationList())
        {
            Message m2 = m1;
            m1.BeginInvoke(delegate(IAsyncResult result)
            {
                string msg = m2.EndInvoke(result);
                Console.WriteLine("The message is " + msg + ".");
            }, null);
        }
    }

    static void Main()
    {
        MyMessage += FirstMessage;
        MyMessage += SecondMessage;
        MyMessage += ThirdMessage;

        Start();
    }
}

提前致谢!

1 个答案:

答案 0 :(得分:2)

这可能是因为您的程序在终止之前不会等待后台任务完成。

您需要为Main方法添加一些方法来等待所有后台任务完成。

为了排除故障,请在调用Start:

后再尝试添加
Console.ReadLine();

如果这样会显示消息,那么这就是原因。

究竟如何解决这个问题,我不知道,因为问题中的代码太习惯了。