Консольная программа закрывается без причины до завершения кода - PullRequest
1 голос
/ 18 октября 2019

Мое консольное приложение завершает работу до завершения кода (после выполнения / попытки выполнения строк, таких как «Console.WriteLine» или «int i = 0»)

Я добавил несколько точек останова, чтобы увидеть, какая строкапоследний, который должен быть выполнен до выхода из программы. В первые несколько попыток программа завершается после / при попытке выполнить следующую строку:

Console.WriteLine($"Online users to chat with ({users.Length} total):");

Затем я попытался получить значение строки в скобках Console.WriteLine, используя окно Immediate. который работал. Я нажал F10, чтобы перейти к следующей строке, и он успешно распечатал заданный параметр. Но затем, после нажатия клавиши F10, программа сама закрылась, когда выделенная часть была «int i = 0»:

for (int i = 0; i < users.Length; i++)

Вот код, я добавил комментарии ко всем строкам, которые программа закрыла так,далеко:

public static void Main()
    {
        client = new WebClient();
        messages = null;

        try
        {
            LocalhostServer.Start("Chat");
            // Starts a server with System.Net.HttpListener. The prefix added is: http://localhost:<port>/Chat/
        }
        catch { }
        LocalhostServer.RecievedRequest += LocalhostServer_RecievedRequest;

        Console.WriteLine("Enter your name:");
        name = Console.ReadLine();
        // closed here^^ after adding a new breakpoint to this line, makes no sense to me
        try
        {
            client.DownloadString(new Uri(Url + "AddUser?name=" + name));
            // Url is a static string which is set to: "http://localhost:<port>/Chat/"
        }
        catch { }

        ShowOnlineUsers();
    }

    private static async void ShowOnlineUsers()
    {
        try
        {
            thread = new Thread(CheckIfChatStarted);
            thread.Start();

            Console.Clear();
            string[] users = (await DownloadStringUntilSuccess(Url + "GetOnlineUsers")).Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
            // closed here^^ after adding a new breakpoint to this line

            Console.WriteLine($"Online users to chat with ({users.Length} total):"); // closed here
            for (int i = 0; i < users.Length; i++) // closed here on "int i = 0;"
            {
                Console.WriteLine($"{i + 1}. {users[i]}");
            }

            Console.WriteLine("\nEnter user number to chat with:");
            recipient = users[int.Parse(Console.ReadLine()) - 1];
        }
        catch (Exception ex)
        { // hasn't reached the breakpoint on that bracket

        }

        client.DownloadString(new Uri(Url + "StartChat?name=" + name + "&recipient=" + recipient));
    }

Понятия не имею, почему это происходит ... Большое спасибо заранее всем, кто пытался помочь!

PS - Может ли это быть вызвано консолью? .Clear / Console.WriteLine команды выполняются в фоновом потоке, в то время как основной поток ожидает ввода пользователя (Console.ReadLine)? Если да, есть ли какое-нибудь решение / обходной путь?

1 Ответ

0 голосов
/ 18 октября 2019

Попробуйте добавить

Console.Readline()

, чтобы держать консоль открытой ...

...