我有一个使用 Flash 控件播放电影的 C# 程序。我遇到的问题是,当我在电影完全加载之前尝试向 Actionscript 发送消息时收到错误消息。为了解决这个问题,我设置了一个计时器等待 1 秒再继续。这反过来又产生了一个不同的问题,因为我现在在不同的线程上运行。为了解决这个问题,我尝试在计时器事件处理程序中使用 Invoke,但由于某种原因它似乎并没有实际调用该方法。我可以看到进程正在使用 50% 的 cpu,但它永远不会从 Invoke 语句中返回。我查看了许多问题,并尝试了 4 或 5 种不同的方法来使用 Invoke 和 BegainInvoke 方法。我的应用程序的设计是我有一个实例化表单的主类。表单的构造函数加载并开始播放电影。主类设置计时器并尝试显示表单,这是问题发生的地方。
public MyClass()
{
demoForm = new DemoForm();
timer.Elapsed += new ElapsedEventHandler(engine);
timer.Interval = 1000;
timer.Enabled = true;
for (int i = 0; ; i++)
counter++;
}
private void engine(Object source, ElapsedEventArgs e)
{
timer.Enabled = false;
if (demoForm.InvokeRequired)
{
demoForm.BeginInvoke(new MethodInvoker(sendNextMessage));
}
else
{
sendNextMessage();
}
}
private void sendNextMessage()
{
// It never gets here!!!
}