我试图想出一个办法预先处理我的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();
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top