Программа Winform на C# зависает при вызове отладки.Часто пишется в Visual Studio

#c# #visual-studio #winforms

Вопрос:

После того, как я сменил жесткий диск на SSD, я запускаю свою программу разработки в режиме отладки в Visual Studio, и программа всегда зависает(не отвечает), но перед сменой жесткого диска проблем нет. Я попытался исследовать проблему и обнаружил, что отладка.WriteLine имеет отношение к этой проблеме.

Чтобы повторить проблему, я приведу простое приложение ниже. После нажатия кнопки панель вывода в Visual Studio отобразит текст, как и ожидалось, но если мы переместим курсор после нажатия кнопки, пока отображается текст, программа зависнет.

Изменить : Если я раскомментирую поток.Спящий режим(5); программа не будет зависать.

 public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
    }

    private void buttonTestRun_Click(object sender, EventArgs e)
    {
        Thread thread1 = new Thread(Worker);
        thread1.Start();
    }

    private void Worker()
    {
        int total = 10000;
        for (int i = 0; i < total; i  )
        {
            Debug.WriteLine($"Progress : {(double)i / total * 100}%");
            //Thread.Sleep(5);
        }
    }
}
 

Я использую Windows 10 20H2 (19042.804), Visual Studio 2019 (16.8.6)

Не могли бы вы, пожалуйста, дать мне какое-нибудь предложение ? Заранее спасибо.

Комментарии:

1. сменил жесткий диск на SSD , затем Прогресс: …% . Что у вас там на самом деле есть, в вашем реальном коде? Что-то, что считывает файлы с диска и обновляет пользовательский интерфейс, вызывая его?

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

3. Только не этот код. Покажите свой настоящий код.

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

5. Это код, который (слишком часто) Вызывает пользовательский интерфейс из того потока, который вы запустили.