最近我們把vs2003的Windows Form程式升級到vs2005下
在升級的過程式發生一個和執行緒有關的問題
在執行階段,系統丟出一個錯誤訊息
訊息名稱為『進行對 Windows Form 控制項的安全執行緒呼叫』
當您發生這個錯誤時,
您應該在Windows Form的程式中有執行一個Threading的程式
這個執行緒程式會呼叫或call back(raise一個事件)
並將資料回傳給Form的某個控制項。
而.net 2.0中認定您的做法是不安全的執行緒呼叫。
請參考(http://msdn2.microsoft.com/zh-tw/library/ms171728.aspx)
小弟的解決方法如下:
' 建立一個Delegate事件來處理安全姓的非同步呼叫
Delegate Sub GetMsgCallback(ByVal msg As String)
' 以下這個方法就是您被呼叫的method
Public Sub GetMsg(ByVal msg As String)
' TextBox1就是您用來取得資料或指定資料的控制項
If Me.TextBox1.InvokeRequired Then
Dim d As New GetMsg(AddressOf GetMsgCallback)
Me.Invoke(d, New Object() {value})
Else
Me.TextBox1.Text= "應該就沒問題了"
End If
End Sub
在升級的過程式發生一個和執行緒有關的問題
在執行階段,系統丟出一個錯誤訊息
訊息名稱為『進行對 Windows Form 控制項的安全執行緒呼叫』
當您發生這個錯誤時,
您應該在Windows Form的程式中有執行一個Threading的程式
這個執行緒程式會呼叫或call back(raise一個事件)
並將資料回傳給Form的某個控制項。
而.net 2.0中認定您的做法是不安全的執行緒呼叫。
請參考(http://msdn2.microsoft.com/zh-tw/library/ms171728.aspx)
小弟的解決方法如下:
' 建立一個Delegate事件來處理安全姓的非同步呼叫
Delegate Sub GetMsgCallback(ByVal msg As String)
' 以下這個方法就是您被呼叫的method
Public Sub GetMsg(ByVal msg As String)
' TextBox1就是您用來取得資料或指定資料的控制項
If Me.TextBox1.InvokeRequired Then
Dim d As New GetMsg(AddressOf GetMsgCallback)
Me.Invoke(d, New Object() {value})
Else
Me.TextBox1.Text= "應該就沒問題了"
End If
End Sub
全站熱搜
留言列表