使用vb.net中的委托从线程内访问表单控件

时间:2013-08-26 05:20:19

标签: vb.net multithreading delegates controls

我在使用委托从线程更新表单控件时遇到问题。

这是我使用的流程。

仪表板屏幕(父级mdi窗口) - > QuizScreen(儿童Mdi窗口) 进入QuizScreen后启动一个线程,并将该线程代码保存在一个模块(server.vb)中。 从这个线程我需要找到并更新一个控件(动态创建)

以下是我从线程

中调用的委托代码
Public Sub ChangePictImage(ByVal ipaddress As String)
    If Me.InvokeRequired Then
        Dim del As NodeDelegate
        del = AddressOf ChangePictImage
        Me.Invoke(del, ipaddress)
        'Return
    Else
        Me.BackColor = Color.Green
        Me.BackgroundImage = System.Drawing.Image.FromFile(Application.StartupPath & "\images\application-on.png")
    End If


    Dim centerFlowPanel As FlowLayoutPanel = CType(QuizScreen.centerFlowPanel, FlowLayoutPanel)
    Dim computerIconsPanel As FlowLayoutPanel = CType(centerFlowPanel.Controls("computerIconsPanel"), FlowLayoutPanel)
    Dim flowpanel As FlowLayoutPanel = CType(computerIconsPanel.Controls("flow_" + ipaddress), FlowLayoutPanel)
    Dim pictControl As PictureBox = CType(flowpanel.Controls("pict_" + ipaddress), PictureBox)
    pictControl.Image = System.Drawing.Image.FromFile(Application.StartupPath & "\images\application-on.png")
End Sub

我从线程内部调用此委托,如下所示

threadData.dashboard.ChangePictImage(ipAddress)

您可能已经注意到,我已将委托子文件放在dashboad.vb

我能够找到最深层次的元素。事实上,我可以提醒他们的名字和其他财产 但是当我尝试设置某些东西时。它没有做任何事情。

任何人都可以帮助我。

0 个答案:

没有答案