<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      C# 委托與事件的簡單應用

      看過最好的文章,是這篇C# 中的委托和事件 - Jimmy Zhang - 博客園 (cnblogs.com)

      看過以后,需要自己總結使用,畢竟光說不練假把戲,記錄一下

       

      1. 把委托當做參數傳遞使用

      對于具有相同參數類型,相同返回類型的方法,可以通過同一個帶有委托的方法直接調用,避免用ifelse或者switch選擇

      public delegate int ComputeEventHandle(int x, int j); //聲明委托
      
              private int Add(int a,int b)
              {
                  return a + b;
              }
      
              private int Mul(int a,int b)
              {
                  return a * b;
              }
      
              private int Sub(int a,int b)
              {
                  return a - b;
              }
      
              private int Div(int a,int b)
              {
                  if (b != 0)
                  {
                      return a / b;
                  }
                  else
                  {
                      return int.MinValue;
                  }
              }
      
      
              private int GetResult(int a ,int b, ComputeEventHandle handle ) //傳遞委托
              {
                  return handle(a,b);
              }
      
      
              private void button11_Click(object sender, EventArgs e)
              {
                  int re = GetResult(10, 2, Add);
                  Console.WriteLine(re);
                  re = GetResult(10, 2, Sub);
                  Console.WriteLine(re);
                  re = GetResult(10, 2, Mul);
                  Console.WriteLine(re);
                  re = GetResult(10, 2, Div);
                  Console.WriteLine(re);
              }
      View Code

       

      2. 通過委托異步調用

      異步委托調用前面線程總結的文章已經寫過,這里寫個簡單的

              public delegate void WaitingEventHandle(int time);
      
              private void Waiting(int time)
              {
                  Console.WriteLine("開始");
                  Thread.Sleep(time * 1000);
                  Console.WriteLine("結束");
              }
              private void button12_Click(object sender, EventArgs e)
              {
                  WaitingEventHandle waitingHandle = new WaitingEventHandle(Waiting);
                  waitingHandle.BeginInvoke(3, null, null);
              }
      View Code

       

      3. 通過委托解決跨線程更改控件屬性問題

              private delegate void SetTextEventHandle(Control lb, string strValue);
      
      private void SetCaptionValue(Control cl, string text)
              {
                  try
                  {
                      if (cl.InvokeRequired)//如果調用控件的線程和創建創建控件的線程不是同一個則為True
                      {
                          while (!cl.IsHandleCreated)
                          {
                              //解決窗體關閉時出現“訪問已釋放句柄“的異常
                              if (cl.Disposing || cl.IsDisposed)
                                  return;
                          }
                          SetTextEventHandle d = new SetTextEventHandle(SetCaptionValue);
                          cl.BeginInvoke(d, new object[] { cl, text });
                      }
                      else
                      {
                          cl.Text = text;
                      }
                  }
                  catch (Exception ex)
                  {
                      Console.WriteLine(ex.ToString());
                  }
              }
      View Code

       

      4. 事件的使用

      在一個界面中通過事件調用另一個界面的方法

      //Form1中
              public event Func<int> FlashWork;
      
              private async  void bt_Flash_Click(object sender, EventArgs e)
              {
                  var task = Task.Run(() =>
                  {
                      return FlashWork();
                  });
                  int re = await task;
                  if (re == 1)
                  {
                      MessageBox.Show("刷寫異常,請重新刷寫");
                  }
              }
      
      
      //Form2中
                      form.FlashWork += Flash;//訂閱事件,Flash是一個方法
      View Code

       

      posted @ 2022-03-15 17:39  尋找迷途的羔羊  閱讀(208)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产制服丝袜无码视频| 久久精品国产2020| 亚洲国产日韩a在线播放| 国产精品最新免费视频| 亚洲欧美日韩国产四季一区二区三区 | 日韩AV高清在线看片| 欧美日韩国产综合草草| 国产国产午夜福利视频| 久久亚洲熟女cc98cm| 久久热在线视频精品视频| 亚洲欧美日韩综合一区在线| 国产中文字幕精品视频| 亚洲日本乱码熟妇色精品| 在线播放免费人成毛片| 在线a级毛片无码免费真人| 久久天天躁夜夜躁狠狠85| 加勒比亚洲视频在线播放| 国产精品国三级国产av| 一区二区三区四区亚洲自拍| 边摸边吃奶边做爽动态| 国产永久免费高清在线| 国产精品不卡一区二区视频| 大桥未久亚洲无av码在线| 蜜臀av午夜精品福利| 丁香婷婷色综合激情五月| 天天躁日日摸久久久精品| 午夜福利日本一区二区无码| 亚洲永久精品日韩成人av| 欧美一区二区三区成人久久片| 给我播放片在线观看| 高清在线一区二区三区视频| 2019香蕉在线观看直播视频| 国产精品嫩草99av在线| 国产精品中文字幕二区| 蜜桃麻豆www久久囤产精品| 久久精品国产99精品亚洲| 99国精品午夜福利视频不卡99| 97超级碰碰碰碰久久久久| 男女爽爽无遮挡午夜视频| 亚洲一区二区视频在线观看| 97se亚洲综合自在线|