在不调用属性的情况下使用单独的子

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)