- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
嗨当用户选择菜单项时,我从我的主窗体打开这样的窗体。
private void commToolStripMenuItem_Click(object sender, EventArgs e)
{
Command_Form Command_Form1 = new Command_Form();
Command_Form1.ShowDialog();
// Command_Form1.Dispose(); this didn't help
}
在表格“Command_Form1”中当用户点击关闭按钮时,我这样关闭它
private void Close_button_Click(object sender, EventArgs e)
{
this.Close(); //I get the exception here
}
此过程一次正常,但在第二次关闭表单时(我希望这是一个完全不同的/新的表单实例)我在这篇文章的标题中得到了错误。这是调试窗口中的输出。
System.Windows.Forms.dll 中发生类型为“System.InvalidOperationException”的第一次机会异常
列出此错误的所有主题都在继续关于不尝试对尚未显示的表单执行任何操作,但是当我单击表单中的按钮时会发生这种情况。在我看来,如果我能够单击它的按钮,几乎可以确保表单已显示。
我发现列出此类错误的其他帖子继续进行有关进行线程安全调用的内容,因此我将其作为实验进行了尝试,但没有任何区别。
private void Close_button_Click(object sender, EventArgs e)
{
if (this.InvokeRequired)
{
CloseCallback d = new CloseCallback(Close_button_Click);
Invoke(d, new object[] { sender, e });
}
else
{
this.Close();
我的应用程序中有多个线程,但它们是由我使用的控件创建的,而不是由我明确创建的。我通过委托(delegate)[s]编码接收/发送的数据,将数据从串行端口传递到/从表单传递。串行端口运行在与表单不同的线程上是有道理的,但为什么单击表单上的按钮会与表单在不同的线程中运行????
整个线程的事情很困惑我如何找出哪些线程起源于何处以及在我未明确创建的线程中发生了什么?为什么我需要通过委托(delegate)调用窗体的关闭方法?哎呀,在这个线程安全的多线程环境中我能做些什么如果我不知道什么/在哪里/为什么/谁/何时创建线程,我怎么知道我正在做的事情是否不安全/安全?
最佳答案
我的猜测是您的 close() 调用不会抛出该异常,而是在 close() 之后发生的事情。您是否使用调试器进入代码以查看它何时触发?
至于何时需要调用...只有一个线程允许在 GUI 上进行更改和访问动态属性,称之为 GUI 线程。 GUI 线程负责更新布局、触发按钮等事件。如果您曾经从另一个线程访问 GUI(例如计时器事件),则需要使用 invoke() 将您的函数排队以在 GUI 线程上运行。 BeginInvoke 也会对函数进行排队,但它是异步的(只会对要在 GUI 线程上运行的函数进行排队,但不会等待它完成)。
Close_button_click 只会在按钮单击事件触发时由您的 gui 线程调用(除非您在代码后面的其他地方明确调用它,不推荐!),所以 invokeRequired=false 在您上面的代码中,调用代码是从未执行过。
关于c# - 我只能关闭一次窗体,在创建窗口句柄之前无法在控件上调用 InvalidOperation Exception Invoke 或 BeginInvoke,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4948087/
对于一个科学实验,我写了一个turtle.py ,它会打开一个 800x480 的窗口并绘制一个缓慢增长的黑点。 turtle.py以 C:\Users\kaza>python C:\Users\ka
我开发了一个 swing 应用程序,但每次运行应用程序时都会打开一个新窗口。我希望如果一个窗口已经打开,则其他窗口不允许打开。 最佳答案 Here是一个 Java 单一应用实例的例子: A singl
有没有办法检测主进程中 Electron 的结构? process.platform 似乎也在 x64 机器上返回 win32,我没有在文档中找到任何获取架构的选项。 最佳答案 你试过 process
public short[] HanningWindow(short[] signal_in ,int pos ,int size) { for (int i= pos; i < pos+si
我有一个具有这些属性的 Electron 窗口: mainWindow = new BrowserWindow({ width: 800, height: 600, title: "Aqu
我有一个 Ubuntu 工作站,我正在尝试引导一个 Windows 节点。 Windows 节点在端口 2222 上打开了 ssh。我一直在关注 http://docs.opscode.com/plu
我是一名优秀的程序员,十分优秀!