问题标签 [formclosing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 如果在工作线程中使用 Invoke 方法,Thread.Join 永远不会在 FormClosing 事件中返回
我正在使用多线程编写应用程序。该应用程序基本上有一个 UI 和一个在后台执行一些工作并更新 UI 的线程。当我关闭表单时,在 formclosure 事件中,我通知工作线程停止。但是,由于某些原因,它阻塞了,我不知道是什么原因导致它阻塞。下面是我的问题的简化代码,我的实际代码更复杂。
问题是如果我使用
要在按钮事件中停止工作线程,工作线程将停止但不会在表单关闭事件中停止。任何帮助,将不胜感激。谢谢。
c# - 关闭活动表单后在不同的表单上调用事件处理程序
我有一个 C# 应用程序,我需要在关闭活动表单后在表单上执行特定或函数。
在关闭前一个活动表单后,我需要执行代码的表单成为活动表单。因此,简而言之,在关闭此表单后,我需要在其中运行事件处理程序或函数的表单将成为活动表单。有没有办法做到这一点?
我已经在另一个表单关闭后激活的表单上尝试了 Form_Enter 事件处理程序,但这不起作用。
.net - 在什么情况下我们应该只在实现文件中写函数的定义?
我有form1和form2。要打开 form2,我们应该点击按钮 btn。我们使用指针 f2 指向 form2 的指针,然后使用 show(this) 打开它,我们使用公共函数 DialogClosed 使 f2 指向 nullptr。
在 Form1.hi 中有:
在 Form2.hi 中有:
在 Form2.cpp 我有:
我的问题:为什么我们应该在实现文件中而不是在头文件中编写定义 Form2_FormClosed。我试图在头文件中写入定义,但它不起作用。我需要你的帮助,请给我你的意见。
c# - 不允许表单以任何方式关闭
我知道我可以取消用户在 Windows 窗体中单击 x 按钮的事件,但我想这样做,以便任务管理器无法关闭它。我还没有在网上找到这个,但我相信有办法做到这一点。
vb.net - Me.IsHandleCreated 是确定表单是否已关闭的可靠指标吗?
我发现它似乎是,但我不了解该属性的内部运作,以确定是否知道。当用户关闭表单时,此属性似乎可靠地返回 False。
当我有后台工作人员运行时,我会使用它,并且在进行任何进一步处理之前,我会在完成的事件中检查此属性。
c# - 当用户单击表单上的“X”按钮时终止正在运行的线程
假设我有一个名为 mainFrm 的表单和一个名为 objectA 的对象,该对象包含正在运行的线程。当这两种情况发生时,我的程序应该关闭:
(1)。用户单击 mainFrm 中的“X”按钮(因此引发 mainFrm.FormClosing)
(2)。在 objectA 中引发了一个事件(我们将其命名为“connectionClosed”)
因此,无论是否触发(1)或(2),此事件链应始终包括:
- 任何对象的终止底层线程。(我已经知道如何使用位于 objectA 中的代码优雅地终止它们)
- 当然,mainFrm 的关闭
解决这个问题的最佳方法是什么?
我就是这样解决的
不知道为什么这个问题没有得到社区的好评。我认为这是相当清晰和直接的。这是我解决它的方法,我希望这也有助于更好地定义我的意思。如果您有任何其他疑问,请告诉我 =)
在表单类中:
在 objectA 的类中:
根据开头所述的 (1) 和 (2) 用例,这就是应该发生的事情(如果我没记错的话)
(1)。用户单击“X”按钮 -> 表单关闭 -> formclosed 被引发 -> objectA.kill 方法委托被执行 -> 内部线程引发一些 connectionClosed 事件,这将触发更多 objectA.kill 执行,但这不会造成任何损害,这要归功于volatile bool _connectionClosed (当然,因为有一个 try/catch 无论如何都可以工作,但对我来说不再执行此类代码更有意义)-> 线程由 objectA.kill 的唯一完全执行终止-> SUCCESS
(2)。服务器关闭连接或网络错误 -> objectA 的内部线程检测到连接错误并引发多个 connectionClosed 事件 -> 不同的线程将尝试执行 objectA.kill 方法委托。-> 同时,在主窗体中,closeForm 被执行,关闭窗体 -> 这也触发了另一个 objectA.kill 执行(感谢 this.FormClosed += _client.killClient; ) -> 再次,这不会造成伤害,因为 _connectionClosed volatile bool 将只让一个线程实际执行代码(引发事件的第一个)-> 线程通过 objectA.kill 的唯一完整执行优雅地终止-> SUCCESS
下一步应该是找到一种更方便的方法,以便 connectionClosed 可能只上升一次,我现在就去谷歌搜索 =)
c# - 用 X 关闭表单比关闭任务栏慢得多
我们的一位客户正在使用带有 SP2 的 Windows XP。当他们使用表单上的普通 X 按钮关闭表单时,大约需要 30 秒才能关闭表单。但是,当他们右键单击 Windows 任务栏中的表单并单击关闭时,它会立即关闭。
我已经在我的开发机器上运行了这两个场景的程序,并且在我的代码中调用了相同的事件,所以我不确定这两种关闭表单的方法之间有什么区别。
我们有其他客户在运行 XP,但他们使用的是 SP3。这是windows的问题,我应该让他们升级到SP3吗?
该程序是使用 .Net 3.5 用 C# 编写的
c# - Application.Exit 调用 FormClose 事件
我正在使用 .NET4.5 Winforms C#。
我的应用程序基于模型视图控制器模式。在主窗体(视图)上,我有一个退出按钮。如果用户按下此按钮,则在控制器上调用一个方法来清理内容,然后调用 Application.Exit()。这工作正常。
我还想在用户按下右上角窗口中的默认窗口退出十字时运行此方法。为此,我处理 FormClosing 事件。在此事件中,我再次调用调用 Application.Exit(); 的控制器方法;
现在的问题是 Application.Exit() 也会触发 FormClosing 事件。这会产生双重呼叫。当然,我可以为此制作一个标志并进行测试,但我觉得我做错了什么。
关闭我的 winforms 应用程序并清理所需内容的正确方法是什么。我不想在视图的关闭事件中进行清理,看起来很难看。
vb.net - 动词。net 等待第二个表格关闭,然后再继续
vb.net 中有没有办法暂停函数\事件并等到另一个表单关闭才能继续
例子:
我能找到的最接近我想要的是一个输入框,但是一个输入框在我想要的东西上是有限的,尽管它会等待,因为我希望 Form2 能够正常工作。
另一个建议是循环直到 form2 关闭,但是作为解决方案,这是 hacky 和不专业的(我的意见)
vb.net - 在 FormClosing 上保存组件的更改值
在我的应用程序中,我有一个带有一些选项卡的 TabControl。每个选项卡都包含许多组件。如果应用程序正在关闭,我想检查任何组件的值是否已更改。如果是这样,我会询问用户是否要保存它。
我想知道您如何解决这种情况(因为这是应用程序关闭时的标准行为)。我以为我有一些标志(布尔),我为每个组件设置了一个事件 ValueChanged。如果处理此事件的方法被触发,则此标志设置为 true。在关闭应用程序的情况下,我只会检查标志是否为真。
但问题是有超过 30 个组件和创建方法来处理每个组件的事件,这对我来说似乎没有效果。