Windows 窗体应用程序没有响应

luc*_*cse 2 c# forms window winforms

我创建了一个 Windows 窗体控制台应用程序,我正在其中读取由另一个控制台应用程序编写的文件。另一个控制台应用程序将写入某个进程的状态,Windows 窗体应用程序将读取状态并相应地更新状态文本框。我为上述场景编写了以下代码。

while (true)
{
    if ((new FileInfo(filename)).Length > 0)
    {
         Status = File.ReadAllText(filename, Encoding.ASCII);
         System.IO.File.WriteAllText(filename, string.Empty);

         Statustb.Text = Status;
         Statustb.Refresh();
                    
         if (Status.Equals("Data Got Loaded"))
         {
             Environment.Exit(0);
         }
     }
 }
Run Code Online (Sandbox Code Playgroud)

当我运行 Windows 窗体应用程序时,它显示“窗体无响应”,但是当我注释掉这些行时,它会顺利运行。但对我来说,更新状态很重要。

Jen*_*cke 5

您必须了解 GUI 应用程序的体系结构。

与用户的所有交互都发生在一个线程上。

这包括对鼠标和键盘事件等做出反应。

如果这些事件之一发生,您可以处理该事件并对其进行响应。

但是,在您从处理程序返回之前,应用程序将无法接收任何进一步的通知(Windows 消息又名事件)。

我怀疑您在构造函数或一个或其他事件处理程序中具有上述代码。由于您永远不会退出(无限循环,由于while(true)没有returnor break,操作系统无法向应用程序发送任何进一步的事件。它们被放入要发送的队列中,但永远不会被拾取。

Windows 将检测到这种情况并为您提供Not Responding对话框消息。

我建议,那,而不是让里面的代码while(true)回路,为您营造Timer一个合适的Interval,并把身体while语句(即位之间的{},而不是while(true)在节拍处理程序本身)。