成都创新互联网站制作重庆分公司

vb.net给线程传参数 C#线程传递参数的方式

VB.NET线程内调用带参数的方法异常

报错信息是什么?截图一下。

创新互联建站长期为成百上千客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为上街企业提供专业的成都网站建设、网站设计,上街网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制开发。

---------补充----------------

你这报错与线程应该关系不大吧,是调用COM不熟悉造成的,在项目属性里面有些相关配置你研究研究。

vb.net 如何传递类参数

线程结束后利用委托生成事件返回,线程应用包括传入和传出参数。

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

VB.NET中传递参数有哪些方式?

byval

byref

Of

Optional

ParamArray

在Visual stdio 工程中写 public sub AA(

下面自动出现这五个.

你这个默认是指自动生成的方法(过程\函数)吗?

那么默认是值传递Byval

要是自己写函数.则无参为默认

vb.net 线程 如何动态 address of 过程,即 "过程" 是可以用户动态传送的。

过程名是不可能作为参数使用的,想必你需要调用的过程是有限的,那么可以用一个变量来确定:

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

VB.net 两个窗体之间传递参数

新窗体中写

构造函数

,然后调用。

比如你要调用的新窗体是From1.cs这个窗体,

public

Form1(要传入的参数)

{

//把传入的参数传入窗体中

//执行窗体标准内容

}

然后在需要调用的地方调用

Form1

f

=

new

Form1(传出的参数);

'--------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();

如此就能实现调用了。

VB.net子程序传参的困惑(ByVal 和Byref 没有区别的时候是为什么??)

这里觉得没有区别,是因为在SubAddRow 里,我们并没有试图改变形参 t 本身,我们所做的改变都是 t.Rows,我们为 t 添加了行。

对于形参和实参而言,在ByVal 模式下 temTable 和 t 指向了同一块内存,但是这两个变量本身并不在同一个地址上。在改变 t.Rows时,由于二者都指向同一块内存,所以更改了t.Rows里的行数据;

在ByRef模式下,temTable 和 t 就是同一块内存,二者在一个地址上,肯定也就指向同一块内存,在改变 t.Rows时,就是对 temTable 的改变。

在此举个例子:假设我们需要将 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

' 并且这样调用

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

ClearRow(temTable)

DataGridView1.DataSource = temTable

End Sub

这样,就是有区别的了。ByVal方式时,虽然 t 被置为 Nothing ,但是由于 t 和 temTable 并不是一个变量,并不在同一个地址上,所以 temTable 没有变。

而 ByRef 时,t 和 temTable 就是同一个变量,在同一个地址上,t = Nothing的同时,temTable 也就是Nothing了。

如果这个解释还不清楚,可以追问。


文章名称:vb.net给线程传参数 C#线程传递参数的方式
当前地址:http://cxhlcq.com/article/hhesho.html

其他资讯

在线咨询

微信咨询

电话咨询

028-86922220(工作日)

18980820575(7×24)

提交需求

返回顶部