0

私はここで与えられた答えをいじっています C#の別のスレッドからGUIを更新する方法?

次のコードから Method 'System.Windows.Forms.Label' Text not found というエラーが表示されます

Private Delegate Sub setControlPropertyThreadSafeDelegate(control As Control, propertyName As String, propertyValue As Object)

Public Sub setControlPropertyThreadSafe(control As Control, propertyName As String, propertyValue As Object)
    If control.InvokeRequired = True Then
        control.Invoke(New setControlPropertyThreadSafeDelegate(AddressOf setControlPropertyThreadSafe), New Object() {control, propertyName, propertyValue})
    Else
        control.GetType().InvokeMember(propertyName, Reflection.BindingFlags.SetProperty, Nothing, control, New Object() {control, propertyName, propertyValue}) 'This is where the error occurs
    End If
End Sub

別のスレッドから、次の行でこのメソッドを呼び出します

UI.setControlPropertyThreadSafe(UI.lblExcel, "Text", "Inserting Data into YTD Template")

このエラーに関するヘルプは大歓迎です。

4

1 に答える 1

3

この線

control.GetType().InvokeMember(propertyName, Reflection.BindingFlags.SetProperty, _
    Nothing, control, New Object() {control, propertyName, propertyValue})

する必要があります

control.GetType().InvokeMember(propertyName, Reflection.BindingFlags.SetProperty, _
    Nothing, control, New Object() {propertyValue})

最後のパラメータInvokeMemberは、メソッドのパラメータ リストです。これは、プロパティ設定の場合、設定したい値にすぎません。リンク先の質問は正しいです。

于 2012-10-29T23:00:08.920 に答える