zoukankan      html  css  js  c++  java
  • 线裎里面传递参数问题解决方案

    /*
    需要明确Form知道线程结束后要干什么。
    举个例子:
    比如我需要在线程结束之后,刷新Form上Label的内容。
    这样,可以定义一个delegate,让线程结束之后回调刷新Label这个方法。
    以下是示例代码,Class1也可以是Form这个类。
    */


    class Class1
    {

      [STAThread]
      
    static void Main(string[] args)
      
    {
       Class1 c 
    = new Class1();
       ThreadWrapper tw 
    = new ThreadWrapper(new Callback(c.PrintResult), 100);
       
    // 线程开始
       tw.Start();
       Console.ReadLine();
      }

                      
       
    // 打印结果,用于回调
      public void PrintResult(int result)
      
    {
       Console.WriteLine(
    "Result:   " + result.ToString());
      }

     }


     
    // 回调代理
     public delegate void Callback(int n);

     
    class ThreadWrapper
     
    {  
      
    public readonly Thread mThread;

      
    private Callback callback;

      
    private int n;

       
    // 参数1:用于回调的代理
       
    // 参数2:需要计算的值
      public ThreadWrapper(Callback callback, int arg)
      
    {
          
    this.callback = callback;
          ThreadStart myThreadDelegate 
    = new ThreadStart(this.Run);
          
    this.mThread = new Thread(myThreadDelegate);
          
    this.n = arg;
      }


     
    // 线程的对外接口
      public void Start()
      
    {
          
    this.mThread.Start();
      }


      
    // 需要在线程里调用的方法
      public void Run()
      
    {
          
    int result = this.Caculate(this.n);
          callback(result);
      }


      
    private int Caculate(int n) 
      
    {
          
    return n*100;
      }

     }

  • 相关阅读:
    wireshark 实用过滤表达式(针对ip、协议、端口、长度和内容)
    32:从1到n整数中1出现的次数
    31:连续子数组的最大和
    30:最小的K个数
    29:数组中出现次数超过一半的数字
    28:字符串的排列
    27:二叉搜索树与双向链表
    26:复杂链表的复制
    25:二叉树中和为某一个定值的路径
    24:二叉搜索树的后序遍历序列
  • 原文地址:https://www.cnblogs.com/jhtchina/p/353871.html
Copyright © 2011-2022 走看看