从vb.net中的线程访问动态创建的表单元素
我是VB和.Net新手,我有一个无法继续的任务从vb.net中的线程访问动态创建的表单元素,vb.net,multithreading,dynamically-generated,Vb.net,Multithreading,Dynamically Generated,我是VB和.Net新手,我有一个无法继续的任务 当screen1加载时,我启动一个线程。然后用户进入屏幕2 在屏幕2上,线程仍在后面运行。当用户在screen2上执行操作(比如单击)时,它将触发线程访问screen2上的元素 屏幕2中的元素是动态创建的,而不是在IDE中设计的 因此,本质上,在一个窗体上创建的线程需要访问在另一个窗体上动态创建的窗体元素 如果我的问题太简单,请原谅我。如果不清楚,请让我知道,我会重新措辞 注意:我所说的元素基本上是流布局面板中的一个图片框 提前谢谢 所有的帮助都被
任务和异步和等待关键字
调用UI对象上的方法。基本上,您告诉.NET运行被调用的方法,它在UI对象的创建线程(在本例中为UI线程)上运行,这就是您想要的。这将允许您(取决于调用的方法或属性)从后台“更新”控件-同样,这都是花招;当调用UI对象上的方法时,invkoked方法可能使用从后台任务传递到所述方法的数据在UI线程上运行
此外,请查看BacgkroundWorker
上的MSDN文档(该文档在.NET 2.0中引入,并被.NET 4.5中的async
和wait
关键字以及任务所取代)。有很多可用的文档可以准确地解释如何执行您的请求。在MSDN或Bing(或您喜欢的搜索引擎)上快速搜索并不难找到。这项任务的哪一部分您遇到了问题?你有没有试过,但效果不好?还是你有错误?或者你只是在征求关于如何着手做类似事情的一般建议?嗨,史蒂文,谢谢你的回复。尝试访问动态创建的元素时出错。错误是“对象引用未设置为对象的实例”。如果我尝试使用表单上的事件访问相同的元素(动态元素),我就能够做到这一点。但是在线程中尝试相同的代码时。由于某种原因,它找不到元素。我是一名web开发人员(php/python),基本上陷入了一个vb.net项目中。应用程序开发对我来说是相当新的。它可能和线程无关,但不可能用这么少的细节来说明。如果你能发布一个复制问题的简化代码示例,那将非常有帮助。你能帮我整理一下吗。再次感谢。亲爱的@fourpastmidnight我很久没看到这个了。因为我换了一个不同的任务,我离开了这个。现在我回到原来的任务。因此,首先感谢您的回复。但是午夜四点我用了代理,但它仍然不起作用。
public sub changeComputerStatus(ByVal node)
Dim flowpanel As FlowLayoutPanel = CType(QuizScreen.FlowLayoutPanel1.Controls("flow_" + node), FlowLayoutPanel)
Dim pictControl As PictureBox = CType(flowpanel.Controls("pict_" + node), PictureBox)
pictControl.Image = System.Drawing.Image.FromFile(Application.StartupPath & "\images\application-on.png")
end sub