我需要更改表单上所有TableAdapter的超时值 . 我有一个适用于单个组件的函数,但是当我尝试从表单创建的组件列表中传入值时,它不起作用 . 我得到“对象引用未设置为对象的实例” . 对于列表中的项目 . 该错误来自TableAdapterCommandTimeout函数,当我在表单上传递普通组件(表单设计器上的TableAdapter1)时,这是有效的 . 任何帮助将不胜感激,谢谢 .

' main function code
Public Sub GetComponents(ByVal frm As Form)        
Dim comsList = GetTableAdapterList(frm)
        For Each item As Component In comsList
            TableAdapterCommandTimeout(item, 300)
        Next
End Sub
' code to get list of Table Adapters
Public Function GetTableAdapterList(ByVal frm As Form) As List(Of Component)
Dim components As New List(Of Component)
Dim fieldInfos() As FieldInfo = frm.GetType.GetFields(BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.DeclaredOnly)
        For Each f As FieldInfo In fieldInfos
            If f.FieldType.BaseType Is GetType(Component) Then
                Dim c As Component = TryCast(f.GetValue(frm), Component)
                If c IsNot Nothing And c.ToString.Contains("TableAdapter") AndAlso Not c.ToString.Contains("TableAdapterManager") Then components.Add(c)
            End If
        Next
        Return components
    End Function
' code to update timeout
Public Shared Sub TableAdapterCommandTimeout(Of T As Global.System.ComponentModel.Component)(ByRef TableAdapter As T, CommandTimeout As Integer)
        If (TableAdapter IsNot Nothing) Then
            Dim pi = GetType(T).GetProperty("CommandCollection", BindingFlags.NonPublic Or BindingFlags.GetProperty Or BindingFlags.Instance).GetValue(TableAdapter, Nothing)
            If pi IsNot Nothing Then
                For Each c In TryCast(pi, System.Data.SqlClient.SqlCommand())
                    If (c IsNot Nothing) Then
                        c.CommandTimeout = CommandTimeout
                    End If
                Next
            End If
        End If
    End Sub