我正在使用 LinuxMint 和 MonoDevelop 开发 C# 应用程序。
我写了下一个代码,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Threading;
using System.Diagnostics;
namespace TestProgram
{
public static class Program
{
public static int count = 0;
static object locker = new object();
const int limit = 10;
[STAThread]
static void Main()
{
for(int i = 0; i < Program.limit; ++i)
{
Action item = () => Program.RunForm();
item.BeginInvoke((a) => item.EndInvoke(a), null);
Thread.Sleep(1000);
}
while(true)
{
Thread.Sleep(1000);
if(Program.count == 0)
break;
}
return;
}
static void RunForm()
{
lock(Program.locker) {
Program.count += 1;
}
Application.EnableVisualStyles();
Application.Run(new Form());
lock(Program.locker) {
Program.count -= 1;
}
}
}
}
在 DotNET 中,该程序运行良好。10 个窗口正确显示。
在 Mono 中,程序在没有托管异常的情况下崩溃。
当第 2 个、第 3 个或以后的窗口出现时,它突然崩溃。
这是单声道的错误吗?还是代码错了?
为什么行为不一样?
(请原谅我糟糕的英语。)