gpt4 book ai didi

c# - Windows 窗体应用程序没有响应

转载 作者:行者123 更新时间:2023-12-02 17:45:40 33 4
gpt4 key购买 nike

我创建了一个 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);
}
}
}

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

最佳答案

您必须了解 GUI 应用程序的架构。

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

这包括对鼠标和键盘事件等使用react。

如果发生其中一个事件,您可以处理该事件并执行某些操作来响应它。

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

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

Windows 将检测到这种情况并向您提供未响应对话框消息。

我建议,不要将代码放在 while(true) 循环中,而是创建一个具有合适的 IntervalTimer ,并放置 while 语句的 body (即 {} 之间的位,但不是 while(true) 本身)在 Tick 处理程序中。

关于c# - Windows 窗体应用程序没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35100244/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com