【发布时间】:2016-03-27 18:55:51
【问题描述】:
我正在创建一个 Windows 窗体应用程序,该应用程序根据从数据库中提取的数据动态创建控件。
我的代码在后台运行良好,它从数据库加载数据并将其应用于变量,我遇到的问题是尝试使用这些数据创建控件时,出现多线程错误(附加信息:跨线程操作无效:控件“flowpanelMenuRules”从创建它的线程以外的线程访问。)
我正在使用 BackgroundWorker_DoWork 事件,失败的代码如下:
Me.flowpanelMenuRules.Controls.Add(PanelRule(i))
之前的代码是一个简单的循环,遍历变量(从数据库中提取)并收集信息。
有没有人有任何安全调用上述行的经验?我似乎根本无法让它工作:(
感谢您的帮助,如果需要,我可以发布更多代码。
【问题讨论】:
-
请参阅stackoverflow.com/questions/142003/… 了解问题所在。
-
控件不应在后台线程上创建。它们被分配给创建它们的线程,并且只能在那里使用。您应该调用控件的具体创建和更新,其余的可以在 BGW 中完成。
标签: c# vb.net multithreading winforms