异步事件不输出到控制台
本文关键字:控制台 输出 事件 异步 | 更新日期: 2023-09-27 18:18:23
我刚刚创建了我的第一个多线程程序,它不工作。以下是我能想出的最小的完整程序,它描绘了我正在尝试做的事情。
实际上,我创建了一个委托,它不接受任何参数并返回一个字符串;三个方法(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();
}
}
提前感谢!
一个可能的原因是您的程序在终止之前没有等待后台任务完成。
你需要为你的Main
方法添加一些方法来等待所有后台任务完成。
为了排除故障,尝试在调用Start:
之后添加这个Console.ReadLine();
如果这使得消息出现,那么这就是原因。
确切地如何解决这个问题,我不知道,因为问题中的代码太做作了,无法修复