如何调用main方法或重启app控制台?

时间:2011-04-18 18:09:42

标签: c# console-application

当发生异常时,我想重新启动所有处理或启动Main方法,在这个其他方法之后:

public void DisplayMessage(string message) { 
    Console.WriteLine(message, "Rebuild Log Files"); 
    Console.WriteLine(" Press Enter to finish, or R to restar the program..."); 
    string restart = Console.ReadLine(); 
    if(restart.ToUpper() == "R") { 
        //Call the Main method or restart the app 
    } 
    Console.ReadKey(); 
}

注意:main方法包含一些用户写入的数据。

我该怎么做?

7 个答案:

答案 0 :(得分:2)

好的,你有一个主要的

void main(...)
{
    some code
}

您需要做的就是......

void main()
{
    runStartUpCode();
}

void runStartUpCode()
{
    some code
}

然后当您需要重新启动代码时,再次调用runStartUpCode()。

答案 1 :(得分:2)

if(restart.ToUpper() == "R") { 
    Close();
    System.Diagnostics.Process.Start(Application.ExecutablePath);
}

答案 2 :(得分:0)

static void Main(string[] args) {
  try {
    // code here
  } catch /* or finally */ {
    DisplayMessage(/* pass in any state from Main() here */);
  }
}

static void DisplayMessage(/* passed in state from Main() */) {
  // original DisplayMessage() code

  // if R was pressed
  Main(/* put any args to pass to Main() in here */);
}

答案 3 :(得分:0)

当你读这篇文章时,我实际上刚刚完成了这个问题。我复制了ORIGINAL主方法,改变了原始的几个选项,并留下副本来调用新的main方法。这就是我的意思。

static void Main(string[] args)
{
    Program CallingTheRealMain = new Program();
    CallingTheRealMain.Main2();
}

public void Main2()
{
   //Any code here
}

我最初需要这样做,因为我需要循环回主方法但不能因为它是静态的。这段代码对我来说很好,如果你选择实现它,希望它也适合你。希望我帮忙。快乐的编码!

答案 4 :(得分:0)

DialogResult result = MessageBox.Show("Do You Really Want To Logout/Exit?", "Confirmation!", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (result == DialogResult.Yes)
            {
                this.Close();
                System.Diagnostics.Process.Start(Application.ExecutablePath);
            }

答案 5 :(得分:0)

我认为,如果您的应用要自动重启,则您的设计方法应该有所改变。...这是一个伪代码

main (){
errorObj = null;
internalFunct(errorObj);
if(errorObj != null) return;
secondINternalFunction();
}

正在运行该应用程序...

while(!errorObj){
main();
}

为什么我更喜欢这种方法,因为避免了Main或函数的调用...如果您使用的内存较小,那么在有限空间的堆栈上没有必要调用main ... ...您别无选择,只能进行迭代...

答案 6 :(得分:-1)

C#的新手,对于错误我深表歉意。 使用这个:

    static void Restart() {
    String[] n = new String[10];
                    n[0] = "hi";
                    Main(n);
    }                                  

Main出于我不知道的原因采用了字符串数组。对我来说似乎没有用,因为我尝试将其删除,但似乎没有任何变化。因此,也许这也可行: 尝试删除Main()的string[] args部分,以便您可以键入Main();。没有 issues