【发布时间】:2013-12-11 13:15:43
【问题描述】:
帮助我理解这一点。我正在调试一些旧代码。反正我有这个方法:
private void textBox1_Validated(object sender, EventArgs e)
{
toolTip1.SetToolTip(textBox1, "This is a test tooltip");
toolTip1.Show("This is a test tooltip", this, label3.Location, 2000);
}
此方法按预期工作,它在成功验证后立即显示一个工具提示。这一切都发生在 MDI 应用程序的子窗体上。如果我之后尝试关闭表单(无论 tooltop 是否可见),我都会收到此错误:
跨线程操作无效:从 线程不是创建它的线程 System.Windows.Forms.Control.get_Handle() 在 System.Windows.Forms.Control.SetParentHandle(IntPtr 值)在 System.Windows.Forms.Control.ControlCollection.Remove(控制值)
在 System.Windows.Forms.MdiClient.ControlCollection.Remove(控制 值)在 System.Windows.Forms.Control.Dispose(布尔处理)
在 System.Windows.Forms.Form.Dispose(Boolean disposing) 在 VlastitiBackgroundWorker.BazniEkran.Dispose(Boolean disposing) in D:\TFSWorkspace\VlastitiBackgroundWorker\VlastitiBackgroundWorker\BazniEkran.Designer.cs:line 20 在 VlastitiBackgroundWorker.DesetSekundi.Dispose(布尔 处置)在 D:\TFSWorkspace\VlastitiBackgroundWorker\VlastitiBackgroundWorker\DesetSekundi.Designer.cs:line 20 在 System.ComponentModel.Component.Dispose() 在 System.Windows.Forms.Form.WmClose(Message&m)
为什么?它是可重现的。
【问题讨论】:
-
你确定是这段代码吗?
-
何时调用
textBox1_Validated? -
可能是您尝试从 BackgroundWorker 访问您的控件
-
您的 Background Worker 组件似乎正在访问您的 TestForm (this) 实例。
-
是的,我确定。如果我注释掉这两行代码,我将不会收到此错误。从 Validated 事件调用 Validated 方法。该项目不包含任何多线程操作。