我刚创建了我的第一个多线程程序,但它无效。以下是我能想出的最小的完整程序,它描绘了我想要做的事情。
基本上,我创建了:一个不带参数并返回字符串的委托;与上述委托的方法签名匹配的三种方法(FirstMessage
,SecondMessage
和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();
}
}
提前致谢!
答案 0 :(得分:2)
这可能是因为您的程序在终止之前不会等待后台任务完成。
您需要为Main
方法添加一些方法来等待所有后台任务完成。
为了排除故障,请在调用Start:
后再尝试添加Console.ReadLine();
如果这样会显示消息,那么这就是原因。
究竟如何解决这个问题,我不知道,因为问题中的代码太习惯了。