C#委托、事件、线程
程序员文章站
2022-07-11 08:11:19
这是几个简单的例子,但是实际的开发中委托还还只在反射时用到过,事件的话只自己做了一次,并且还是特意去用的 ,实际上可以不用。线程的话,因为需要,所以用的会多点,这里主要是WS上的线程。 委托 在前面的反射实例中,也有用到委托执行方法。 这个例子是将一个方法或者委托实例作为另外一个函数的入参传递。 至 ......
这是几个简单的例子,但是实际的开发中委托还还只在反射时用到过,事件的话只自己做了一次,并且还是特意去用的 ,实际上可以不用。线程的话,因为需要,所以用的会多点,这里主要是ws上的线程。
委托
在前面的反射实例中,也有用到委托执行方法。
这个例子是将一个方法或者委托实例作为另外一个函数的入参传递。
至于有什么用,我现在还没用上。
private delegate void dosth(string s);//定义委托 无返回值 一个string参数 private void button2_click_1(object sender, eventargs e) { dosth dosth = new dosth(func);//实例化委托, domain(dosth);//domain(func) 调用函数方法domain,入参可以是对应的方法func也可以是委托实例化的后的dosth } private void func(string s) { messagebox.show(s); } private void domain(dosth fun) //方法domain 入参接收一个委托实例或者函数:返回值是空,入参是一个string { fun("hello world!"); }
事件
事件使用发布-订阅模型,事件在类中申明且生成,通过使用同一个类或者其他类中的委托与事件处理程序关联。
包含事件的类用于发布事件,被称为发布器,其他接收该事件的类称为订阅器。
发布器中描述的是怎么调用事件,也就是触发事件,订阅器中实际是事件具体的执行,最终要做什么在订阅器中完成。
这是一个实例。
发布器类
发布事件,定义触发事件执行的逻辑的设定。
public class publish { private int value; public delegate void mydelegate(string s);//申明委托 public event mydelegate myevent;//基于申明的委托定义事件 public publish() { value = 3; } public void compairvalue(int n) { if (n == value)//满足条件 { onvaluechanged(); } } protected void onvaluechanged() { if (myevent != null) { myevent("hello world!");//触发订阅器中的方法执行 } } }
订阅器类
被触发时,做该做的事。
public class subscribe { public void showmessage(string s) { messagebox.show(s);//事件触发,订阅器中执行指定操作,更多的的操作可以在这个类中完成 } }
触发器
private void button3_click(object sender, eventargs e) { publish pub = new publish(); subscribe sub = new subscribe(); pub.myevent += sub.showmessage;//或者new publish.mydelegate(sub.showmessage); 把订阅器中的方法绑定到事件上,也就是注册发布器中的事件 pub.compairvalue(3);//当入参为3时,触发事件,订阅器中的方法则执行 }
线程
这里的线程是ws上的线程
public void domain(){
static object threadlock = new object(); public static thread thread; lock (threadlock) { try { boolean threadisexit = thread.isalive;//如果报错说明线程不存在 if (!threadisexit) { thread.start(); } } catch {try { thread = new thread(new threadstart(dosth));//开启一个线程,回调函数synstart thread.isbackground = true;//设置线程为后台线程 thread.start(); } catch (exception ex) { } finally { } } finally { } }
}
public void dosth(){
}