【问题标题】:Creating Windows Form outside of Application.Run results in strange behaviour. Why?在 Application.Run 之外创建 Windows 窗体会导致奇怪的行为。为什么?
【发布时间】:2013-05-13 10:18:12
【问题描述】:

经过一周的代码调试后,我发现我的基于 Windows 窗体的 GUI 行为异常的问题是因为我将表单运行为:

Form1 myGui = new Form1();
Application.Run(myGui);

将代码更改为:

Application.Run(new Form1());

显然成功了。

我遇到的问题是,由于某种原因,如果我以第一种方式创建表单并尝试使用 Invoke/BeginInvoke 模式编组一个调用,则该调用从未得到解决,而另一个线程则挂在案例中调用,或者根本不使用 BeginInvoke 调用函数。

谁能解释为什么会这样?

此外,我正在 Mono 和 Unity3D 上运行应用程序。

谢谢大家

【问题讨论】:

  • 这是范围问题吗?除了 Form1 的生命周期之外,这 2 种方法之间没有区别。
  • 这两行代码的作用完全相同。这听起来像是 Mono 的问题。
  • 感谢您的回复。至于作用域,变量“myGui”是一个类变量,在调用类构造函数时实例化,但在调用方法“SpawnGui”时运行。我认为这不会导致范围界定问题!至于单声道,是的,这可能是问题所在,但这种行为太奇怪了,我认为还有其他问题。谢谢

标签: c# winforms mono unity3d invoke


【解决方案1】:

我曾在 Windows 和 Mono 下处理过许多场景,在这些场景中,表单引用要么是全局管理的,要么是作用域为在 Main 方法中或通过 Main 方法静态调用 Application.Run 期间可用的类。这听起来太可疑了,只能是范围界定问题。您是否尝试过仅包含您提到的代码的极简应用程序?我无法在 Mono 下使用 Unity3D 重现相同的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-05
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多