報錯信息是什么?截圖一下。
創(chuàng)新互聯(lián)建站長期為成百上千客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為上街企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計,上街網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
---------補充----------------
你這報錯與線程應(yīng)該關(guān)系不大吧,是調(diào)用COM不熟悉造成的,在項目屬性里面有些相關(guān)配置你研究研究。
線程結(jié)束后利用委托生成事件返回,線程應(yīng)用包括傳入和傳出參數(shù)。
Public Delegate Sub ThreadCallback(value As ThreadResult)
Public Class Form1
Private WithEvents _th_1 As Thread_1
Protected Overrides Sub OnLoad(e As System.EventArgs)
Dim value As ThreadObject
value.Index = 1
Me._th_1 = New Thread_1(Me)
Me._th_1.Run(value)
MyBase.OnLoad(e)
End Sub
Private Sub Thread_1_End(sender As Object, e As ThreadEventArgs) Handles _th_1.ThreadEnd
Me.TextBox1.Text = e.Result.Text
End Sub
End Class
Public Class Thread_1
Public Event ThreadEnd(sender As Object, e As ThreadEventArgs)
Private _control As Control
Sub New(control As Control)
Me._control = control
End Sub
Public Sub Run(value As Object)
Dim th As New Threading.Thread(AddressOf ThreadProc)
th.Start(value)
End Sub
Private Sub ThreadProc(obj As Object)
Dim value As ThreadObject = CType(obj, ThreadObject)
Dim result As ThreadResult = Nothing
If value.Index = 1 Then result.Text = "測試"
Dim callback As New ThreadCallback(AddressOf ThreadInvoke)
_control.Invoke(callback, result)
End Sub
Private Sub ThreadInvoke(value As ThreadResult)
RaiseEvent ThreadEnd(Me, New ThreadEventArgs(value))
End Sub
End Class
Public Structure ThreadObject
Public Index As Integer
'Public Rect As Rectangle
End Structure
Public Structure ThreadResult
Public Text As String
'Public Rect As Rectangle
End Structure
Public Class ThreadEventArgs
Inherits System.EventArgs
Private _result As ThreadResult
Public ReadOnly Property Result As ThreadResult
Get
Return _result
End Get
End Property
Sub New(value As ThreadResult)
Me._result = value
End Sub
End Class
byval
byref
Of
Optional
ParamArray
在Visual stdio 工程中寫 public sub AA(
下面自動出現(xiàn)這五個.
你這個默認是指自動生成的方法(過程\函數(shù))嗎?
那么默認是值傳遞Byval
要是自己寫函數(shù).則無參為默認
過程名是不可能作為參數(shù)使用的,想必你需要調(diào)用的過程是有限的,那么可以用一個變量來確定:
sub 過程名(p as integer)
Dim i As Threading.Thread
select case p
case 1
i = New Threading.Thread(AddressOf 過程1)
case 2
i = New Threading.Thread(AddressOf 過程2)
.........................
..........................
end select
i.start()
end sub
新窗體中寫
構(gòu)造函數(shù)
,然后調(diào)用。
比如你要調(diào)用的新窗體是From1.cs這個窗體,
public
Form1(要傳入的參數(shù))
{
//把傳入的參數(shù)傳入窗體中
//執(zhí)行窗體標(biāo)準(zhǔn)內(nèi)容
}
然后在需要調(diào)用的地方調(diào)用
Form1
f
=
new
Form1(傳出的參數(shù));
'--------Form1--------
Dim
f2
As
Form2
Private
Sub
Command1_Click()
Set
f2
=
New
Form2
f2.Show
vbModal
End
Sub
'--------Form1
End--------
'--------Form2--------
Dim
WithEvents
f3
As
Form3
Private
Sub
Command1_Click()
Set
f3
=
New
Form3
f3.Show
End
Sub
Public
Sub
f3_f2W()
Me.Command1.Caption
=
"f2W"
End
Sub
'--------Form2
End--------
'--------Form3--------
Public
Event
f2W()
Private
Sub
Command1_Click()
RaiseEvent
f2W
End
Sub
'--------Form3
End--------
f.Show();
如此就能實現(xiàn)調(diào)用了。
這里覺得沒有區(qū)別,是因為在SubAddRow 里,我們并沒有試圖改變形參 t 本身,我們所做的改變都是 t.Rows,我們?yōu)?t 添加了行。
對于形參和實參而言,在ByVal 模式下 temTable 和 t 指向了同一塊內(nèi)存,但是這兩個變量本身并不在同一個地址上。在改變 t.Rows時,由于二者都指向同一塊內(nèi)存,所以更改了t.Rows里的行數(shù)據(jù);
在ByRef模式下,temTable 和 t 就是同一塊內(nèi)存,二者在一個地址上,肯定也就指向同一塊內(nèi)存,在改變 t.Rows時,就是對 temTable 的改變。
在此舉個例子:假設(shè)我們需要將 temTable 清空,那么我們還是以 t 作為形參,我們可以這樣寫:
'?ByVal?方式傳參
Private?Sub?ClearRow(ByVal?t?As?DataTable)
t?=?Nothing
End?Sub
'?ByRef?方式傳參
Private?Sub?ClearRow(ByRef?t?As?DataTable)
t?=?Nothing
End?Sub
'?并且這樣調(diào)用
Private?Sub?Button3_Click(ByVal?sender?As?System.Object,?ByVal?e?As?System.EventArgs)?Handles?Button3.Click
ClearRow(temTable)
DataGridView1.DataSource?=?temTable
End?Sub
這樣,就是有區(qū)別的了。ByVal方式時,雖然 t 被置為 Nothing ,但是由于 t 和 temTable 并不是一個變量,并不在同一個地址上,所以 temTable 沒有變。
而 ByRef 時,t 和 temTable 就是同一個變量,在同一個地址上,t = Nothing的同時,temTable 也就是Nothing了。
如果這個解釋還不清楚,可以追問。