【问题标题】:C# - Application.Run()C# - Application.Run()
【发布时间】:2012-01-20 11:22:27
【问题描述】:

我刚刚开始 .Net 开发 (C#),遇到了一些让我有些困惑的代码......

如果我有

Form myForm = new Form();

下面这行实际上做了什么:

Application.Run(myForm);

它本质上是否与 myForm.ShowDialog() 或 myForm.Show() 做同样的事情(这是我认为的,当运行表单时会这样做).....

我总是发现 msdn 是一个很差的资源,无法正确地向新人解释材料

【问题讨论】:

标签: c# .net


【解决方案1】:

Application.Run(myForm); 使该表单对用户可见。这是第一个加载到内存中的表单。它在消息循环中运行此表单,以便您获取所有用户事件。

简答:

Application.Run 开始在当前线程上运行标准应用程序消息循环。

长答案:

Application.Run 导致 Windows 应用程序进入 Winmain 内的消息循环以处理操作系统发布到消息队列的各种 Windows 消息。消息循环“循环”直到它收到 WM_QUIT 消息。它使用GetMessagePeekMessage 来检索消息,并使用PostMessage 将检索到的消息发送到Windows 过程。

如果你这样做了

Form myForm = new Form(); 
myForm.Show();

它将显示表单并退出。当您想从现有表单启动新表单时,您将使用 new Form().Show()

希望这能回答你的问题。

【讨论】:

  • 这里重要的是消息循环。如果没有这个,你基本上会打开一个没有消息循环运行的窗口。
  • 确实是消息泵。如果您进行过任何 C++ Windows 开发,您会发现更容易理解 - C# 更高级别的抽象使得一些东西更难掌握。
  • @VladislavZorov 没错。我已经在 VC++ 中做过一些事情,即使你会做很多事情。
  • 顺便说一句,我们应该在Application.Run(myForm) 行之后处理myForm 吗?正如 SolarLint 建议的那样
【解决方案2】:

使用主窗体启动应用程序,以便在主窗体关闭时终止应用程序。它将与当前线程相关联。它在消息循环中运行此表单。

消息循环意味着:它们作用于操作系统发布到应用程序主线程的消息。应用程序通过在称为“事件循环”的代码段中重复调用 GetMessage (PeekMessage) 函数从消息队列接收这些消息。

Application Run()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    相关资源
    最近更新 更多