#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. Это код, который (слишком часто) Вызывает пользовательский интерфейс из того потока, который вы запустили.