C#控制台中不存在应用程序,我想重新启动控制台

时间:2014-02-25 12:31:07

标签: c#

我做了一个刽子手游戏,我希望能够在你赢了/输了之后重启它,而不是每次都要手动重启程序。

我在互联网上看到“应用程序”可以用来重启控制台。但是,它说应用程序不存在。

 Close();
 System.Diagnostics.Process.Start(Application.ExecutablePath);

请帮助我!

2 个答案:

答案 0 :(得分:1)

您可以通过here找到它:

您需要添加System.Windows.Forms程序集并添加using

using System.Windows.Forms

但对于控制台应用,我更喜欢使用this(在您的控制台程序集中):

System.Reflection.Assembly.GetExecutingAssembly().Location

就像安德烈所说的评论一样,你甚至可以更好地使用Assembly.GetEntryAssembly(),因为它获得了第一个被调用的程序集(当然是控制台应用程序中的可执行程序)

而且,就像先前已经删除的答案一样,首先重新打开,然后关闭应用程序。

答案 1 :(得分:0)

我认为你真的不需要重新启动你的控制台应用程序来重启你的游戏。这是一个可以使用的游戏重启场景:

class Program
{
    static void Main(string[] args)
    {
        Game game = new Game();

        Menu menu = new Menu(game);

        game.Finished += menu.AskAndRun;

        menu.Welcome();
    }
}

class Menu
{
    public readonly IRunnable runnable;

    public Menu(IRunnable runnable)
    {
        this.runnable = runnable;
    }

    public void Welcome()
    {
        Console.WriteLine("Welcome, Player!");

        AskAndRun();
    }

    public void AskAndRun()
    {
        Console.WriteLine("\nTo play a new game, press [ENTER]");

        Console.ReadLine();

        Console.Clear();

        runnable.Run();
    }
}

interface IRunnable
{
    void Run();
}

class Game : IRunnable
{
    public event Action Finished;

    public void Run()
    {
        Console.WriteLine("Game started here...");

        Console.WriteLine("Oops! Game finished already");

        if (Finished != null)
        {
            Finished();
        }
    }
}

如您所见,Game类与重启逻辑分开,现在由Menu类处理。现在,引入诸如退出和计算已开始游戏数量等新功能是微不足道的。

请注意Menu不依赖于Game的事实。这取决于IRunnable,这有助于您更改Game,测试Menu并轻松引入新功能。