异步事件不输出到控制台

本文关键字:控制台 输出 事件 异步 | 更新日期: 2023-09-27 18:18:23

我刚刚创建了我的第一个多线程程序,它不工作。以下是我能想出的最小的完整程序,它描绘了我正在尝试做的事情。

实际上,我创建了一个委托,它不接受任何参数并返回一个字符串;三个方法(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();
    }
}

提前感谢!

异步事件不输出到控制台

一个可能的原因是您的程序在终止之前没有等待后台任务完成。

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

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

之后添加这个
Console.ReadLine();

如果这使得消息出现,那么这就是原因。

确切地如何解决这个问题,我不知道,因为问题中的代码太做作了,无法修复