我正在创建一个 Windows窗体应用程序,它根据从数据库中提取的数据动态创建控件. 我在背景中运行的代码很好,它从数据库加载数据并将其应用于变量,我遇到的问题是当尝试使用这些数据
我在背景中运行的代码很好,它从数据库加载数据并将其应用于变量,我遇到的问题是当尝试使用这些数据创建控件时,我得到一个多线程错误(附加信息:Cross -thread operation无效:控制从其创建的线程以外的线程访问的’flowpanelMenuRules’.)
我正在使用BackgroundWorker_DoWork事件,失败的代码如下:
Me.flowpanelMenuRules.Controls.Add(PanelRule(i))
之前的代码是一个简单的循环,通过变量(从数据库中提取)并收集信息.
有没有人有安全调用上述线路的经验?我似乎无法让它完全工作:(
感谢您的帮助,如果需要,我可以发布更多代码.
我的建议是让BackgroundWorker只创建控件,但不要将它们添加到表单中.而是通过RunWorkerCompleted事件将准备好的控件返回到调用/ UI线程.然后在此时将控件添加到表单中,可能与SuspendLayout()/ ResumeLayout()方法一起使用.