C# 委托于跨线程异步调用

您所在的位置:网站首页 主线程访问子线程变量 C# 委托于跨线程异步调用

C# 委托于跨线程异步调用

2024-05-30 11:55| 来源: 网络整理| 查看: 265

子线程访问主线程控件时,会报出错。

两种方法可以实现第一种是,设置线程的检查方式为无。

第二种是使用委托。第一种没什么好讲的,这里主要讲下第二种。

1,首先是委托

delegate

(1)委托的定义:将方法作为方法的参数

(2)定义委托:

delegate void dele(int a, int b);

(4)给委托变量赋值

del=new dele(add); static void add(int a, int b) { Console.WriteLine("加法运算为{0}", a + b); }

(5)调用委托

del(2, 3);

全部代码:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 委托 { class Program { delegate void dele(int a, int b); static void Main(string[] args) { dele del = null; Console.WriteLine("多播委托,请输入您要的运算"); Console.WriteLine("+,-,*,/"); string str = Console.ReadLine(); switch (str) { case "+": del = new dele(add); break; case "-": del = new dele(sub); break; case "*": del = new dele(mul); break; case "/": del = new dele(div); break; default: Console.WriteLine("输入有误"); break; } weituo(3, 4, del); Console.ReadLine(); } static void weituo(int a,int b,dele del) { del(a, b); } static void add(int a, int b) { Console.WriteLine("加法运算为{0}", a + b); } static void sub(int a, int b) { Console.WriteLine("减法运算为{0}",a-b); } static void mul(int a, int b) { Console.WriteLine("乘法运算为{0}", a*b); } static void div(int a,int b) { Console.WriteLine("除法运算为{0}", a/b); } } }

2 跨线程调用委托

(1)定义类

public class MessageCreate{ }

(2)类中定义委托,定义委托变量,调用委托

public class MessageCreate { //定义委托 public delegate void MyDelegate(ListBox lb, string strMsg); //定义委托变量 public MyDelegate my { get;set; } //调用委托 public void show(ListBox lb, string strMsg){ if (lb.InvokeRequired)//判断这个控件是否是其他线程调用 lb.BeginInvoke(this.My, new object[] { lb, strMsg }); } }

(3)而给委托变量赋值时要在主线程里面赋值,那么这样一个异步调用委托就完成了。

//新建一个类 MessageCreate mc = new MessageCreate(); //给类中的委托变量赋值 mc.My = new MessageCreate.MyDelegate(ShowStatus); //调用委托 mc.show() ------------------委托函数-------------------------- public void ShowStatus(ListBox lb, string strMsg) { lock (lb) { if (lb.Items.Count >= 10000) lb.Items.RemoveAt(0); lb.Items.Add(strMsg); lb.Refresh(); } }

大功告成!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3