0

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

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

最后,我创建了一个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();
    }
}

提前致谢!

4

1 回答 1

2

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

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

为了排除故障,请尝试在调用 Start 后添加:

Console.ReadLine();

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

究竟如何解决这个问题,我不知道,因为问题中的代码太做作而无法修复。

于 2013-06-14T21:10:14.153 回答