zoukankan      html  css  js  c++  java
  • c#基础,单线程,跨线程访问和线程带参数

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Threading;
      4 using System.Windows.Forms;
      5 
      6 namespace 线程和跨线程
      7 {
      8     public partial class Form1 : Form
      9     {
     10         public Form1()
     11         {
     12             InitializeComponent();
     13         }
     14         /// <summary>
     15         /// 单线程直接假死了
     16         /// </summary>
     17         /// <param name="sender"></param>
     18         /// <param name="e"></param>
     19         private void btnAlone_Click(object sender, EventArgs e)
     20         {
     21             for (int i = 0; i < 100000; i++)
     22             {
     23                 //通过[调试]-[窗口]-[输出]显示打印值
     24                 Console.WriteLine(i);
     25             }
     26         }
     27 
     28 
     29         /// <summary>
     30         /// 新线程运行,窗体不假死
     31         /// </summary>
     32         /// <param name="sender"></param>
     33         /// <param name="e"></param>
     34         private void btnNew_Click(object sender, EventArgs e)
     35         {
     36             Thread th = new Thread(ShowCalculator)
     37             {
     38                 IsBackground = true
     39             };
     40             th.Start();
     41 
     42         }
     43         /// <summary>
     44         /// 循环计算方法,供新线程使用
     45         /// </summary>
     46         private void ShowCalculator()
     47         {
     48             for (int i = 0; i < 100000; i++)
     49             {//通过[调试]-[窗口]-[输出]显示打印值
     50                 Console.WriteLine(i);
     51             }
     52         }
     53         /// <summary>
     54         /// 带参数的
     55         /// </summary>
     56         /// <param name="sender"></param>
     57         /// <param name="e"></param>
     58         private void btnParameters_Click(object sender, EventArgs e)
     59         {
     60             List<int> list = new List<int>() { 1, 2, 3, 4, 5 };
     61             ParameterizedThreadStart parThreadStart = new ParameterizedThreadStart(ShowParameters);
     62             Thread th = new Thread(parThreadStart) { IsBackground = true };
     63             th.Start(list);
     64         }
     65         private void ShowParameters(object obj)
     66         {
     67             //线程中的参数只能是Object
     68             List<int> result = obj as List<int>;
     69             foreach (var item in result)
     70             {
     71                 MessageBox.Show(item.ToString());
     72             }
     73         }
     74         /// <summary>
     75         /// 跨线程访问
     76         /// </summary>
     77         /// <param name="sender"></param>
     78         /// <param name="e"></param>
     79         private void button1_Click(object sender, EventArgs e)
     80         {
     81             Thread th = new Thread(ShowMulti) { IsBackground = true };
     82             th.Start();
     83         }
     84         /// <summary>
     85         /// 解决跨线程访问报异常,不使用关闭跨线程检查
     86         /// </summary>
     87         private void ShowMulti()
     88         {
     89             int first = 0;
     90             for (int i = 0; i < 10; i++)
     91             {
     92                 first = i;
     93             }
     94             //是否要对lbl控件进行跨线程
     95             if (this.lblShow.InvokeRequired)
     96             {
     97                 //对委托中的数据类型验证
     98                 this.lblShow.Invoke(new Action<Label, string>(ShowLableValue), this.lblShow, first.ToString());
     99             }
    100             else
    101             {
    102                 this.lblShow.Text = first.ToString();
    103             }
    104         }
    105         /// <summary>
    106         /// 把值写到控件中
    107         /// </summary>
    108         /// <param name="lbl"></param>
    109         /// <param name="value"></param>
    110         private void ShowLableValue(Label lbl, string value)
    111         {
    112             lbl.Text = value;
    113         }
    114 
    115         private void Form1_Load(object sender, EventArgs e)
    116         {
    117             //关闭跨进程检查
    118             //Label.CheckForIllegalCrossThreadCalls = false;
    119             //改用委托方法实现
    120         }
    121     }
    122 }
  • 相关阅读:
    jforum二次开发教程
    gitPermission denied (publickey).
    用keytool创建Keystore和Trustsotre文件只需五步
    导入数据库时报错1067 – Invalid default value for ‘字段名’
    WordPress用户角色及其权限管理编辑插件:User Role Editor汉化版
    http://blog.csdn.net/wh211212/article/details/53005321
    centos 安装 mysql
    卸载apache服务
    Cordova插件相关常用命令
    UI 交互
  • 原文地址:https://www.cnblogs.com/sighful/p/8981007.html
Copyright © 2011-2022 走看看