C#委托基础9——Invoke与委托

 

C#委托基础系列原于2011年2月份发表在我的新浪博客中,现在将其般至本博客。

 

例一

delegate void AppendStringCallback(string text);

private void AppendString(string txt)
{
     this.listView1.Items.Add(txt);
}

private void ReceiveDate()

{

     AppendStringCallback appendStringCallback = new AppendStringCallback(AppendString);

     this.Invoke(appendStringCallback, new object[] { string.Format("{0},{1},{2}", str1, str2

                 + "号", iepAddress.ToString()) });

}

 

 

例二 

namespace ThreadPoolDemo
{
    public partial class ThreadForm : Form
    {
        // 定义delegate以便Invoke时使用
        private delegate void SetProgressBarValue(int value);   

        // 跟SetProgressBarValue委托相匹配的方法
        private void SetProgressValue(int value)
       {
           progressBar.Value = value;
       }

        // 使用Invoke方法来设置进度条
        private void RunWithInvoke()
        {
            int value = progressBar.Value;
            while (value< progressBar.Maximum)
            {
                //如果是跨线程调用
                if (InvokeRequired)
                {
                    this.Invoke(new SetProgressBarValue(SetProgressValue), value++);
                }
                else
                {
                    progressBar.Value = ++value;
                }
            }
        }   

        public ThreadForm()
        {
            InitializeComponent();
        }   

        private void btnInvoke_Click(object sender, EventArgs e)
        {
            progressBar.Value = 0;
            Thread thread = new Thread(new ThreadStart(RunWithInvoke));
            thread.Start();
        }   

     }
}

 

本文参考自金旭亮老师的《.NET 4.0面向对象编程漫谈》有关代理的内容

细节可以参看我的新浪博客 http://blog.sina.com.cn/s/blog_67aaf4440100omf1.html

时间: 2024-10-28 17:38:39

C#委托基础9——Invoke与委托的相关文章

C#委托基础5——泛型委托Action

C#委托基础系列原于2011年2月份发表在我的新浪博客中,现在将其般至本博客.本文参考自金旭亮老师的<.NET 4.0面向对象编程漫谈>有关代理的内容   为了方便开发,.NET基类库针对在实际开发中最常用的情形提供了几个预定义好的委托,这些预定义委托用得很广,比如在编写lambda表达式和开发并行计算程序时经常要用到他们 对于函数返回值为空的情形,可以使用Action泛型委托 class Program { // 对于函数返回值为空的情形,可以使用Action泛型委托 void Showst

C#委托基础2——多路委托

  C#委托基础系列原于2011年2月份发表在我的新浪博客中,现在将其般至本博客.   多路委托 class Program { public delegate void SayThingToS(string s); void SayHello(string s) { Console.WriteLine("你好{0}", s); } void SayGoodBye(string s) { Console.WriteLine("再见{0}", s); } static

C#委托基础6——泛型委托Predicate

  C#委托基础系列原于2011年2月份发表在我的新浪博客中,现在将其般至本博客.   此委托返回一个bool值,该委托通常引用一个"判断条件函数".需要指出的是,判断条件一般为"外部的硬性条件",比如"大于50",而不是由数据自身指定,不如"查找数组中最大的元素就不适合".   例一 class Program { bool IsGreaterThan50(int i) { if (i > 50) return tru

C#委托基础1——委托基础

  C#委托基础系列原于2011年2月份发表在我的新浪博客中,现在将其般至本博客. 委托和其委托的方法必须具有相同的签名.签名相同:1.参数类型相同 2.参数数量相同 3.返回值一致   例一 class Program { public delegate int MathMethod(int x, int y); public int Add(int a, int b) { return a + b; } static void Main(string[] args) { MathMethod

C#委托基础7——匿名方法

C#委托基础系列原于2011年2月份发表在我的新浪博客中,现在将其般至本博客.   class Program { double AddInt(int x, int y) { return x + y; } string AddString(string s1, string s2) { return s1 + s2; } static void Main(string[] args) { Program p = new Program(); // 以为前两个参数为int,他们运行的结果为dou

C#委托基础4——泛型委托Func

C#委托基础系列原于2011年2月份发表在我的新浪博客中,现在将其般至本博客. 为了方便开发,.NET基类库针对在实际开发中最常用的情形提供了几个预定义好的委托,这些预定义委托用得很广,比如在编写lambda表达式和开发并行计算程序时经常要用到他们.   预定义泛型委托Func class Program { double AddInt(int x, int y) { return x + y; } string AddString(string s1, string s2) { return

C#委托基础3——泛型委托

C#委托基础系列原于2011年2月份发表在我的新浪博客中,现在将其般至本博客.   泛型委托 class Program { // 泛型委托,与普通委托类似,不同之处只在于使用泛型委托要指定泛型参数 public delegate T MyGenericDelegate<T>(T obj1,T obj2); int AddInt(int x, int y) { return x + y; } string AddString(string s1, string s2) { return s1

C#委托基础8——lambda表达式

  C#委托基础系列原于2011年2月份发表在我的新浪博客中,现在将其般至本博客. class Program { double AddInt(int x, int y) { return x + y; } string AddString(string s1, string s2) { return s1 + s2; } static void Main(string[] args) { Program p = new Program(); // 以为前两个参数为int,他们运行的结果为dou

基础才是重中之重~委托实例的几种定义方式(规规矩矩method,逻辑简单delegate,层次清晰lambda

委托,一个不错的东西,.net中的委托用着挺爽,它的重要性以至于微软把它单拿出来,定义了几个现成的委托,如,Func和Action,既然人家把最特殊的委托签名拿 出来了,所以咱们就不 自己去定义了,就用Func和Action委托去讲一个如何定义他们的实例吧,呵呵. 第一 规规矩矩定义方法method 1 /// <summary> 2 /// 与Func<string>相同的方法签名 3 /// </summary> 4 /// <returns></