08===跨线程访问之随机点名系统。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了08===跨线程访问之随机点名系统。相关的知识,希望对你有一定的参考价值。


3、进程:Process
	->方法:1.获取操作系统进程:Process.GetProcess()
			2.开始应用程序:	Process.Start("程序名","要打开的文件");
				打开网页地址:Process.Start("iexplore.ext","htttp://www.baidu.com");
			3、当程序不是全局类型的时候,程序名要加路径。
			4、实例方法:.Thread();.Kill();
4、线程:Thread
	->属性和方法:
		静态:
		1、Thread.Sleep(int 时间毫秒)==》线程停止多少毫秒
		2、Thread.CurrentThread;==>获取当前默认主线程。(最初的线程)
		
		实例:
		1、thread.start();标记线程的开始,等待cpu执行。。
		2、thread.IsBackground;===》标记新线程为后台线程。
		3、thread.Priority=Thread.Normal;==>建议操作系统此线程的级别。不一定有效果。
		4、thread.ManagerThreadId;==>线程的ID。
		5、thread.Abort();==>不得已才调用,直接让线程结束。
		6、thread.Join(int 毫秒后执行);==>等待 thread线程执行完成==>此方法由主线程进行执行。
				执行代码的线程等待此线程执行一定时间后再执行。
				当时间设的过久的时候,主线程指挥等到当前线程结束。当写在循环中时可以循环等待,起始时间是上一次的执行时间。。
								
	
	->线程默认为前台线程,当所有前台线程退出后,进程才退出。
	->后台线程不会阻塞。
	->Main方法。程序会默认创建一个前台主线程执行main方法。。
	
			 
5、跨线程访问的问题:
		1、关闭跨线程访问的限制:Control.CheckForLLegaCrossThreadCalls=false;
		2、判断是否是跨线程访问:
			判断当前控件的.InvokeRequired的值,如果是true表示控件不是当前访问线程创建的。要调用原来创建他的线程进行访问。使用控件名.invoke(传入一个委托,调用要访问的方法。);
			当为false时。执行进行访问。
			if(控件名.InvokeRequired)
			{
				控件名.Invoke(new Action<传入的参数类型>
				(()=>{执行的方法体}),要传入的参数);//找到创建这个控件的线程,执行委托方法
				
				
			}
			else
			{
				直接对控件进行访问。
			}

  

 1 namespace _04跨线程访问的解决
 2 {
 3     public partial class FrmMain : Form
 4     {
 5         public FrmMain()
 6         {
 7             InitializeComponent();
 8         }
 9 
10         bool isRuning = false;
11         private void button1_Click(object sender, EventArgs e)
12         {
13             isRuning = !isRuning;
14             button1.Text = "开始|暂停".Split(new char[] { | },StringSplitOptions.RemoveEmptyEntries)[Convert.ToInt32(isRuning)];
15             string[] name = "鲍信 鲍忠 鲍隆 鲍素 边让 边洪 卞喜 卞氏(曹操妻)  步骘(子山)  步阐 邴原 卑衍 毕轨(昭先) 白寿  陈蕃 陈耽 陈琳(孔璋) 陈宫(公台) 陈翔(仲麟) 陈生 陈登(云龙) 陈炜 陈武(子烈)  陈兰 陈珪 陈纪  陈震(孝起)  陈横 陈孙  陈氏(刘表前妻)  陈就 陈矫 陈应  陈群(长文) 陈式 陈造 陈泰(魏尚书) 陈泰(郭淮副将) 陈骞 陈俊 陈元 程旷 程远志  程普 程昱(仲德) 程秉(德枢) 程咨 程银 程畿 程武 岑晊(公孝) 岑壁 岑威 岑昏  成廉 成宜 成何 成倅 成济 曹节  曹操(孟德 阿瞒)  曹嵩 曹腾  曹仁(子孝)  曹洪(子廉) 曹德 曹豹 曹性 曹氏(吕布次妻) 曹昂 曹安民 曹丕(子桓) 曹植(子建)  曹氏(献帝贵妃) 曹纯 曹休 曹永 曹彰(子文) 曹熊 曹真(子丹) 曹睿(元仲)  曹遵  曹宇 曹芳(兰卿)  曹爽(昭伯) 曹羲 曹训 曹彦 曹文叔 曹据 曹髦(士彦)  曹霖 曹奂(景明)蔡邕(伯喈) 蔡瑁 蔡阳  蔡氏(刘表妻)  蔡中 蔡和 蔡勋 蔡埙 蔡琰  蔡林 淳于琼 淳于导 淳于丹 崔毅 崔烈 崔勇  崔琰(季珪)  崔州平 崔禹 崔谅  崔夫人(刘谌妻) 昌豨 昌奇 单于 车胄 常雕 爨习 彻里吉 董卓(仲颖)  董重 董太后(刘苌妻)  董旻 董璜  董母(董卓母) 董承 董昭(公仁)  董袭(元代) 董贵妃(董承) 董和(幼宰) 董祀 董衡  董超 董治 董允 董厥 董荼那  董禧 董寻 董朝 丁原(建阳) 丁管 丁奉(承渊) 丁斐 丁夫人(曹操元配) 丁仪(正礼)  丁廙(敬礼) 丁咸 丁立 丁谧(彦靖) 丁封 典韦 典满 邓茂 邓龙 邓义 邓芝(伯苗)  邓铜 邓飏 邓艾(士载) 邓忠 邓程 邓敦 邓良 邓贤(刘璋将)  邓贤(孟达甥) 杜远  杜袭 杜袭 杜琼 杜路 杜微 杜义 杜祺 杜睿 杜预 段珪 段煨 戴员 戴陵 窦武  督邮 貂婵 党均 朵思大王 带来洞主 大乔 鄂焕 俄何烧戈  傅婴 傅巽(公悌)  傅干(彦才) 傅士仁 傅彤 傅嘏 傅佥  伏皇后(汉献帝妻) 伏德".Split(new char[] {   }, StringSplitOptions.RemoveEmptyEntries);
16 
17             Random r = new Random();
18             //int i = 0;
19             //while (true)
20             //{
21             //    i++;
22             //   int ran= r.Next(0, 200);
23             //    Thread.Sleep(500);
24             //    txt.Text = name[ran];
25             //    if (i == 10)
26             //    {
27             //        break;
28             //    }
29 
30             //}
31             //创建一个线程来执行循环
32             Thread thread = new Thread(() =>
33             {
34                 while (isRuning)
35                 {
36 
37                     int ran = r.Next(0, 200);
38                     Thread.Sleep(300);
39                     //判断当前控件是不是当前线程创建的控件
40                     if (txt.InvokeRequired)
41                     {
42                         txt.Invoke(new Action(() =>
43                         {
44 
45                             txt.Text = name[ran];
46 
47                         }));
48                     }
49                     else
50                     {
51                         Console.WriteLine(name[ran]);
52                     }
53                     //txt.Text = name[ran];
54 
55                 }
56             });
57             //设置线程为后台线程
58             thread.IsBackground = true;
59             //标记线程已经准备完毕
60             thread.Start();
61 
62         }
63 
64 
65 
66     }
67 }

 

以上是关于08===跨线程访问之随机点名系统。的主要内容,如果未能解决你的问题,请参考以下文章

随机点名系统

JavaScript的数组知识案例之随机点名器

c语言 随机点名

JavaScript实现抖音较火的随机点名系统

随机点名

用C语言编写一个随机点名程序