vb.net 如何传递类参数

vb.net 如何传递类参数,第1张

线程结束后利用委托生成事件返回,线程应用包括传入和传出参数
Public Delegate Sub ThreadCallback(value As ThreadResult)
Public Class Form1
Private WithEvents _th_1 As Thread_1
Protected Overrides Sub OnLoad(e As SystemEventArgs)
Dim value As ThreadObject
valueIndex = 1
Me_th_1 = New Thread_1(Me)
Me_th_1Run(value)
MyBaseOnLoad(e)
End Sub
Private Sub Thread_1_End(sender As Object, e As ThreadEventArgs) Handles _th_1ThreadEnd
MeTextBox1Text = eResultText
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 ThreadingThread(AddressOf ThreadProc)
thStart(value)
End Sub
Private Sub ThreadProc(obj As Object)
Dim value As ThreadObject = CType(obj, ThreadObject)
Dim result As ThreadResult = Nothing
If valueIndex = 1 Then resultText = "测试"
Dim callback As New ThreadCallback(AddressOf ThreadInvoke)
_controlInvoke(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 SystemEventArgs
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

Click事件用户无法自主调用(都是由系统调用的),即便能传递参数,你又如何传进去呢?
RoutedEventHandler委托已经第二个参数是事件参数,如果你需要自定义事件,可以用EventHandler<T>或扩展EventHandler重新定义事件,
那要怎样取消匿名函数的订阅呢?
匿名方法无法取消订阅,如果你需要取消订阅的功能,使用命名方法,

JAVA生成对象的方法:
1、new
2、ClassforName
3、对象序列化
因为第二种生成对象的方式中调用的是对象无参构造函数,所以对象的无参构造函数必须存在。数。
构造函数中的参数传递如下:
public Class Construct{
private int a;//对象私有变量
//无参构造函数
public Construct(){
}
//有参构造函数
public Construct(int a){
thisa= a;//根据传入的值赋值对象的属性
}

public static void main(String[] args) {
int a = 2;//声明一个值为2的变量a
Construct c =new Construct(a);//把a传入构造函数
}
}

1委托概述委托是C#中新加入的一个类型,可以把它想作一个和Class类似的一种类型,和使用类相似,使用一个委托时,需要两个步骤,首先你要定义一个委托,就像是定义一个类一样;然后,你可以创建一个或多个该委托的实例。定义一个委托的语法是这样的:[public/protected/private] delegate returnType delegateName(paramtype param1,…)这是我自己写的,看起来好像有点怪怪的,我来解释一下,private/protected/private是限定词,就不多说了,delegate是申明一个委托的关键词,returnType是一个返回类型,delegateName是一个你给委托起的名字,你可以写任何一个你喜欢的名字,paramtype param1…这个是参数列表。说了这么多可能看起来还是不是很好理解,我是这样认为的,实用点来讲,委托定义就是在一个函数定义中间加入一个delegate的关键词。它的作用类似于你申明一个类:public class ClassName 创建一个委托的实例:[public/protected/private] delegateName deleInstanceName = new delegateName(MethodName)这个类似于实例化一个类,public ClassName instancename = new ClassName(…),这里有个要注意的地方,即MethodName方法要和delegateName的签名一致。什么是签名一致,就是说MethodName的参数列表,返回值要分别和returnType、(paramtype param1,…)一致。举个例子来说明下:public delegate string DelegateDemo(string name, int age);比如我们如上定义了一个委托,就写法来说,其实就是在函数 string DelegateDemo(string name, int age)前面加了一个delegate的关键字,下面我们来用创建一个函数:public string AgentDemo(string name, int age)这个函数是做参数传递给一个DelegateDemo实例的,接下来创建一个DelegateDemo的实例:DelegateName instanceDemo = new DelegateName(AgentDemo);这时要说到一致了,即AgentDemo和声明委托时的DelegateDemo(我们姑且将delegate去掉)这两个函数的返回值,参数列表要相同。终于说完了,不知道看的人明不明白。接下来,我们可以使用这个委托了(调用一个委托),如下:string name = “cshape”;int age = 20;instanceDemo(name, age);当instanceDemo执行时,会执行AgentDemo函数,instanceDemo相当于C里的一个函数指针,现在这个指针指向AgentDemo的函数入口地址。2多点委托前面提到的委托都只包含对一个方法的调用,如果需要调用多个方法,需要多次显示的调用这个委托,我们还有另的选择,我们可以让一个委托中包含多个方法,这样我们一次显示调用委托,就可以按照顺序连续的调用多个方法。看下面的例子:public delegate void MultiDelegate(string name);public void AgentDemo1(string str) public void AgentDemo2(string s) MultiDelegate multiDemo = new MultiDelegate(AgentDemo1);multiDemo += new MultiDelegate(AgentDemo2);multiDemo(“multiDemo test :”); 输出的结果应该是:multiDemo test :this is AgentDemo1mutliDemo test :this is AgentDemo2 可以看到我们一次显示的调用一个委托,它顺序的(按照你添加方法的顺序)执行了方法Agen
如果帮助到您,请记得采纳为满意答案哈,谢谢!祝您生活愉快! vaela

picDoubleClick += new EventHandler(PictureDoubleClick);
这个PictureDoubleClick好像必须有object和eventarg参数吧。
这个object是被点击控件本身 eventarg对应了doubleClick这个事件,和TreeNode没有关系吧。不如你定义个类变量,把你的Node[i]保存起来。

你那个方法我没怎么用过
这个是我写的一个程序中线程的创建
struct
myarg{
U32
fd;
U32
fd_id;
U32
qsend_msgid,qrecv_msgid;
struct
my_msg_st
qsend_data;
struct
my_msg_st
qrecv_data;
};
main()
{
pthread_t
tidp_init,tidp_read,tidp_write;
my_argfd
=
fd;
my_argqrecv_msgid
=
&recv_msgid;
my_argqsend_msgid
=
&send_msgid;
if(pthread_create(&tidp_init,NULL,thread_fun_date,&my_arg)
!=
0)
{
printf("thread_fun_init
is
over
!\n");
}
if(pthread_create(&tidp_read,NULL,thread_fun_read,&my_arg)
!=
0)
{
printf("thread_fun_read
is
over
!\n");
}
if(pthread_create(&tidp_write,NULL,thread_fun_write,&my_arg)
!=
0)
{
printf("thread_fun_write
is
over
!\n");
}
}
voidthread_fun_read(void

my_arg)
{
printf("!!!!!!!
thread_fun_read
!!!!!!!!!!!!\n");
U32
i;
pthread_t
tidp;
struct
myarg
p_my_arg,fd_myarg[UART_NUM];
p_my_arg
=
(struct
myarg
)my_arg;
}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10548595.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-09
下一篇 2023-05-09

发表评论

登录后才能评论

评论列表(0条)

保存