在不调用属性的情况下使用单独的子
Use separate subs without invoking proporties
我正在尝试在没有任何 "background workers" 运行 的情况下与我的主程序一起实现线性代码(少数 System.Windows.Forms.Timers 除外)。我正在使用 Private Subs 以消除复制和粘贴的需要,例如,在我的程序中复制和粘贴相同的 50 行代码 10 次(使编辑和浏览更容易)。但是,我运行陷入了跨线程的问题。据我了解,因为我没有从 UI 线程访问 属性,代码:
Private Sub Update()
DataGridView1.Rows.Clear()
...
...
...
End Sub
给我错误:
Control 'DataGridView1' accessed from a thread other than the thread it was created on.
直到现在我一直在我的 form_load 活动中使用 Control.CheckForIllegalCrossThreadCalls = False
但现在我 运行 遇到了一些计时器没有重新启动的问题。
有没有办法可以线性地达到 运行 这样我就不必每次都调用该方法?我现在有大约 2000 行代码,我不想遍历并调用 Button50.enabled = true
的每个实例等等。
自 .Net Framework 4.0
以来,我们已经能够使用 Lambda sub 进行委派。您甚至可以在 Sub
.
中调用方法
示例:
Private Sub Update()
Me.Invoke(Sub()
'update controls or form in here - thread safe
End Sub)
我正在尝试在没有任何 "background workers" 运行 的情况下与我的主程序一起实现线性代码(少数 System.Windows.Forms.Timers 除外)。我正在使用 Private Subs 以消除复制和粘贴的需要,例如,在我的程序中复制和粘贴相同的 50 行代码 10 次(使编辑和浏览更容易)。但是,我运行陷入了跨线程的问题。据我了解,因为我没有从 UI 线程访问 属性,代码:
Private Sub Update()
DataGridView1.Rows.Clear()
...
...
...
End Sub
给我错误:
Control 'DataGridView1' accessed from a thread other than the thread it was created on.
直到现在我一直在我的 form_load 活动中使用 Control.CheckForIllegalCrossThreadCalls = False
但现在我 运行 遇到了一些计时器没有重新启动的问题。
有没有办法可以线性地达到 运行 这样我就不必每次都调用该方法?我现在有大约 2000 行代码,我不想遍历并调用 Button50.enabled = true
的每个实例等等。
自 .Net Framework 4.0
以来,我们已经能够使用 Lambda sub 进行委派。您甚至可以在 Sub
.
示例:
Private Sub Update()
Me.Invoke(Sub()
'update controls or form in here - thread safe
End Sub)