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;
      }

     }

  • 相关阅读:
    别逃避,是时候来给JVM一记重锤了
    从CAS讲起,真正高性能解决并发编程的原子操作
    深入理解typedef
    【Valse首发】CNN的近期进展与实用技巧(上)
    基于深度学习的目标检测研究进展
    全卷积网络:从图像级理解到像素级理解
    产生式与判别式模型
    游戏后台杂谈:后台的语言、系统与构架
    优化人脸检测网络
    最长的回文子序列
  • 原文地址:https://www.cnblogs.com/jhtchina/p/353871.html
Copyright © 2011-2022 走看看