0

我已经制作了一个用于读取 RSS 并将其输出到标签的应用程序,但我使用的是一个计时器,因为我想循环它。我希望我的线程完成后,等待 3 分钟,然后重新启动它。线程/计时器的作用是制作一个带有 2 个标签的面板,一个用于标题,一个用于描述,我在其中放置了 rss 项目的值。

计时器可以满足我的需要,但控件变得无响应。

顺便提一句。我正在使用自定义控件。

4

1 回答 1

1

(假设 4.0)首先,在你的项目的一个模块中制作这个扩展方法。这将处理跨线程 UI 操作。

<Extension()> _
Public Sub SomeCrossThreadAction(Of T As ISynchronizeInvoke)(ByRef objTarget As T, ByVal actCrossThreadAction As Action(Of T))

    If objTarget.InvokeRequired Then

        objTarget.Invoke(actCrossThreadAction, New Object() {objTarget})

    Else

        actCrossThreadAction(objTarget)

    End If

End Sub

其次,定义将由您的线程调用的方法,该方法利用扩展方法向表单添加控件。这是一个示例(在这种情况下,我是表单。如果您希望传递一个表单参数(或其他类型)来替换“我”,则可以向此方法添加一个表单参数):

Private Sub ThreadsWork()

    Dim lblTest As New Label
    lblTest.Text = "Some Text."

    Me.SomeCrossThreadAction(Sub(frm As Form) frm.Controls.Add(lblTest))

End Sub

在您的 Timer Elapsed 事件处理程序中:

    Dim t As New Threading.Thread(Sub(x) ThreadsWork())
    t.Start()

显然,这并不完全是您正在寻找的内容,但对您来说可能已经足够了。该扩展方法不仅适用于表单类型。

于 2012-07-27T20:23:12.980 回答