估计你是VS2005,VS2003是没有这种问题的VS2005首先要启动一个线程,我用VB.Net为例解释所谓的安全线程,原理是一样的 1、启动线程——声明对应的方法 MyThread = New Threading.Thread(AddressOf ThreadProcSafe) 2、方法中调用修改文本的方法,也是为了安全,两个方法没有合并为一个 Private Sub ThreadProcSafe() '安全调用线程 Dim II As Integer For II = 1 To 100000 Thread.Sleep(1000) 'LblTime.Text = II & "秒" Me.SetText(II & "秒") Next End Sub 3、进行安全的更改文本信息,实际上就是多了一步Me.LblTime.InvokeRequired ,判断你处理的控件是否Ok Private Sub SetText(ByVal [text] As String) If Me.LblTime.InvokeRequired Then Dim d As New SetTextCallback(AddressOf SetText) Me.Invoke(d, New Object() {[text]}) Else Me.LblTime.Text = [text] End If End SubInvokeRequired获取一个值,该值指示调用方在对控件进行方法调用时是否必须调用 Invoke 方法,因为调用方位于创建控件所在的线程以外的线程中。 实际上也并不复杂——就是多出来一步判断而已。 我不大会C#的写法,大体是应该这样吧,呵呵~~ private void SetText(string text) { if (this.LblTime.InvokeRequired) { SetTextCallback d = new SetTextCallback(SetText); this.Invoke(d, new object[] {text}); } else { this.LblTime.Text = text; } }
忘记一样,需要前面声明一个委托,呵呵~~ Delegate Sub SetTextCallback(ByVal [text] As String)
情况如下:
我在主窗口中有一个文本框控件,并启动一个线程在端口上等待,再用收到的内容来更新该
文本框的内容,但此时如果直接操作的话会引起异常,所以想请教名位有无其它方法来更新文本框中的内容!
1、启动线程——声明对应的方法
MyThread = New Threading.Thread(AddressOf ThreadProcSafe)
2、方法中调用修改文本的方法,也是为了安全,两个方法没有合并为一个
Private Sub ThreadProcSafe()
'安全调用线程
Dim II As Integer
For II = 1 To 100000
Thread.Sleep(1000)
'LblTime.Text = II & "秒"
Me.SetText(II & "秒")
Next
End Sub
3、进行安全的更改文本信息,实际上就是多了一步Me.LblTime.InvokeRequired ,判断你处理的控件是否Ok
Private Sub SetText(ByVal [text] As String)
If Me.LblTime.InvokeRequired Then
Dim d As New SetTextCallback(AddressOf SetText)
Me.Invoke(d, New Object() {[text]})
Else
Me.LblTime.Text = [text]
End If
End SubInvokeRequired获取一个值,该值指示调用方在对控件进行方法调用时是否必须调用 Invoke 方法,因为调用方位于创建控件所在的线程以外的线程中。 实际上也并不复杂——就是多出来一步判断而已。
我不大会C#的写法,大体是应该这样吧,呵呵~~
private void SetText(string text)
{
if (this.LblTime.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] {text});
}
else
{
this.LblTime.Text = text;
}
}
Delegate Sub SetTextCallback(ByVal [text] As String)
lbTime.Text = Tmp;很土的一个方法-_-#
特别感谢lovingkiss说得如此详细!