题
我试图想出一个办法预先处理我的winform应用程序加载之前几件事情。我试图把静态无效的主要()的形式的类库项目中,并从Program.cs的评论出来。这产生一个编译时错误:“......不包含适合的切入点静态‘主’方法”。这是有道理的,因为没有加载该程序,DLL不加载任何。
所以,问题是,有没有办法做到这一点呢?我想在DLL的形式,以便能够确定与启动该应用程序,其形式为:
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if(condition1)
{
Application.Run(new Form1());
}
else if(condition2)
{
Application.Run(new Form2());
}
}
这个逻辑将在一个以上的应用程序使用,以便是有意义的把它放在一个共同的部件。
解决方案
你能只是在你的DLL您的应用程序调用,而不是在主做处理添加静态方法?
// In DLL
public static class ApplicationStarter
{
public static void Main()
{
// Add logic here.
}
}
// In program:
{
[STAThread]
public static void Main()
{
ApplicationStarter.Main();
}
}
其他提示
请你Main方法Program.cs中。让它调用的DLL的方法,其实例基于所述条件的表格,并回到主菜单。
在“静态无效的主要”方法是“EXE”组件中,但你可以有这样的方法让你的共享程序集的版本“主”的呼叫。你不能直接这样做。
静态无效的主要()没有意义的类库,但是你的代码段应该做你想要什么,如果放在Program.cs的。
此外,你需要一个包罗万象的“其他”条款,以防万一条件1和条件2不满足?可能不需要,但在大多数情况下,我会想到某种形式的反馈,而不是默默地退出应用程序 - 取决于你正在做的,当然什么
编辑:这可能会做你想要什么,如果你只需要逻辑分隔成库
// Program.cs
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if(MyLib.Condition1)
{
Application.Run(new Form1());
}
else if(MyLib.Condition2)
{
Application.Run(new Form2());
}
}
// MyLib.cs
...
public static bool Condition1
{
get
{
return resultOfLogicForCondition1;
}
}
public static bool Condition2
{
get
{
return resultOfLogicForCondition2;
}
}
从本质上讲,你要创建的形式用于应用程序的自定义工厂。类似如下:
在EXE:
static void Main()
{
Application.Run(new Factory.CreateForm());
}
和库中的:
public static class Factory
{
public static Form CreateForm()
{
if( condition ) return new Form1();
else return new Form2();
}
}
不隶属于 StackOverflow