using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms; namespace WindowsFormsApplication1
{
public partial class Form5 : Form
{
public Form5()
{
InitializeComponent();
}
string aa = "aaaa";
bool bl = false;
private object syncstate = new object();
TaskScheduler scheduler = null;
System.Timers.Timer tmPulse = new System.Timers.Timer();//位置刷新
System.Timers.Timer tmPulse1 = new System.Timers.Timer();//位置刷新
Thread t;
Thread t1;
Thread t2;
private void Form5_Load(object sender, EventArgs e)
{
scheduler = TaskScheduler.FromCurrentSynchronizationContext();
t = new Thread(new ThreadStart(SetData));
t.IsBackground = true;
t.Start(); t1 = new Thread(new ThreadStart(Set1));
t1.IsBackground = true;
t1.Start(); t2 = new Thread(new ThreadStart(Set2));
t2.IsBackground = true;
t2.Start();
} void Set()
{
tmPulse.Interval = ;
tmPulse.AutoReset = true;//设置是执行一次(false)还是一直执行(true); 位置刷新
tmPulse.Start();
tmPulse.Elapsed += (o, a) =>
{
SetData();
};
tmPulse.Enabled = true; tmPulse1.Interval = ;
tmPulse1.AutoReset = true;//设置是执行一次(false)还是一直执行(true); 位置刷新
tmPulse1.Start();
tmPulse1.Elapsed += (o, a) =>
{
Set1();
};
tmPulse1.Enabled = true; }
void SetData()
{
while (true)
{ for (int i = ; i < ; i++)
{
if (i == )
{
ShowMessage("执行结果,是否成功?", "结果确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
}
Task.Factory.StartNew(() =>
{
lock (syncstate)
{
textBox1.Text += ("测试:" + aa + " " + i + "\r\n");
textBox1.SelectionStart = textBox1.Text.Length;
this.textBox1.ScrollToCaret();
}
}, CancellationToken.None, TaskCreationOptions.None, scheduler);
Thread.Sleep();
aa = "第一个测试";
if (i == )
{ }
}
return;
}
}
void Set1()
{
while (true)
{ for (int i = ; i < ; i++)
{
Task.Factory.StartNew(() =>
{
lock (syncstate)
{
textBox1.Text += ("设置1:" + aa + " " + i + "\r\n");
textBox1.SelectionStart = textBox1.Text.Length;
this.textBox1.ScrollToCaret();
}
}, CancellationToken.None, TaskCreationOptions.None, scheduler);
aa = "第1个设置" + i;
Thread.Sleep();
}
Task.Factory.StartNew(() =>
{
lock (syncstate)
{
textBox1.Text += ("设置1:完成\r\n");
textBox1.SelectionStart = textBox1.Text.Length;
this.textBox1.ScrollToCaret();
}
}, CancellationToken.None, TaskCreationOptions.None, scheduler);
return;
}
}
void Set2()
{
while (!bl)
{
for (int i = ; i < ; i++)
{
Task.Factory.StartNew(() =>
{
lock (syncstate)
{
textBox1.Text += ("设置2:" + aa + " " + i + "\r\n");
textBox1.SelectionStart = textBox1.Text.Length;
this.textBox1.ScrollToCaret();
}
}, CancellationToken.None, TaskCreationOptions.None, scheduler);
aa = "第2个设置" + i;
Thread.Sleep();
}
}
}
private void button1_Click(object sender, EventArgs e)
{
bl = true;
} public DialogResult ShowMessage(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon)
{
var dr = new DialogResult();
try
{
var tmp = this.Invoke(new MessageBoxShow(MessageBoxShowF), new object[] { text, caption, buttons, icon });
if (tmp != null)
{
dr = (DialogResult)tmp;
}
}
catch
{ }
return dr;
}
delegate DialogResult MessageBoxShow(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon);
DialogResult MessageBoxShowF(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon)
{ var dr = MessageBox.Show(text, caption, buttons, icon);
return dr;
} private void Form5_FormClosed(object sender, FormClosedEventArgs e)
{
t.Abort();
t.Join(); t1.Abort();
t1.Join();
t2.Abort();
t2.Join();
}
}
}

c#多线程操作测试(阻塞线程,结束任务)的更多相关文章

  1. C# 多线程join的用法,等待多个子线程结束后再执行主线程

    等待多个子线程结束后再执行主线程 class MultiThread{ #region join test public void MultiThreadTest() { Thread[] ths = ...

  2. Java多线程之以7种方式让主线程等待子线程结束

    记一次主线程等待子线程结束的多种方法的学习 在学习多线程时,最开始遇到的问题其实是"计算子线程运行时间",写到最后发现本文和标题更为符合,但是仍然基于问题:"在主线程中获 ...

  3. .NET面试题解析(07)-多线程编程与线程同步

      系列文章目录地址: .NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引 关于线程的知识点其实是很多的,比如多线程编程.线程上下文.异步编程.线程同步构造.GUI的跨线程访问等等, ...

  4. .NET面试题解析(07)-多线程编程与线程同步 (转)

    http://www.cnblogs.com/anding/p/5301754.html 系列文章目录地址: .NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引 关于线程的知识点其实 ...

  5. VC中利用多线程技术实现线程之间的通信

    当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力.用进程和线程的观点来研究软 ...

  6. Qt线程QThread简析(8个线程等级,在UI线程里可调用thread->wait()等待线程结束,exit()可直接退出线程,setStackSize设置线程堆栈,首次见到Qt::HANDLE,QThreadData和QThreadPrivate)

    QThread实例代表一个线程,我们可以重新实现QThread::run(),要新建一个线程,我们应该先继承QThread并重新实现run()函数. 需要注意的是: 1.必须在创建QThread对象之 ...

  7. Java多线程学习(二)---线程创建方式

    线程创建方式 摘要: 1. 通过继承Thread类来创建并启动多线程的方式 2. 通过实现Runnable接口来创建并启动线程的方式 3. 通过实现Callable接口来创建并启动线程的方式 4. 总 ...

  8. 一般来说,主方法main()结束的时候线程结束

    suspend()是将一个运行时状态进入阻塞状态(注意不释放锁标记).恢复状态的时候用resume().Stop()指释放全部. 这几个方法上都有Deprecated标志,说明这个方法不推荐使用. 一 ...

  9. java多线程三之线程协作与通信实例

    多线程的难点主要就是多线程通信协作这一块了,前面笔记二中提到了常见的同步方法,这里主要是进行实例学习了,今天总结了一下3个实例: 1.银行存款与提款多线程实现,使用Lock锁和条件Condition. ...

  10. Delphi 实现多线程编程的线程类 TThread

    http://blog.csdn.net/henreash/article/details/3183119 Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉 ...

随机推荐

  1. 2015 Multi-University Training Contest 1 OO’s Sequence

    OO’s Sequence Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  2. 【转】C#添加修改删除文件文件夹大全

    [转]C#添加修改删除文件文件夹大全 C#添加修改删除文件文件夹大全 StreamWriter sw = File.AppendText(Server.MapPath(".")+& ...

  3. jquery-ui日期时间控件实现

    日期控件和时间控件为独立控件,日期时间控件要同一时候导入日期控件和时间控件的js,然后在日期控件加入时间控件显示參数,没有导入时间控件js.日期控件函数设置的时间控件參将包错 日期控件官网网址:htt ...

  4. UVA 1415 - Gauss Prime(数论,高斯素数拓展)

    UVA 1415 - Gauss Prime 题目链接 题意:给定a + bi,推断是否是高斯素数,i = sqrt(-2). 思路:普通的高斯素数i = sqrt(-1),推断方法为: 1.假设a或 ...

  5. JavaScript-html标题滚动效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. 单点登录(二)使用Cookie+File实现单点登录登出(附源代码)

    上一篇文章<单点登录(一)使用Cookie+File实现单点登录>中,我们实现了单点登录的功能. 本文作为上一篇文章的扩展部分,加入"单点登出"功能. 源代码下载:链接 ...

  7. zzulioj--1746--三角形面积(几何水题)

    1746: 三角形面积 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 100  Solved: 31 SubmitStatusWeb Board De ...

  8. 5. MongoDB基本操作语句

    转自:http://blog.51cto.com/shanqiangwu/1653577 #MongoDB中有三元素:数据库,集合,文档,其中“集合”就是对应关系数据库中的“表”,“文档”对应“行”. ...

  9. [JZOJ4272] [NOIP2015模拟10.28B组] 序章-弗兰德的秘密 解题报告(树形DP)

    Description 背景介绍弗兰德,我不知道这个地方对我意味着什么.这里是一切开始的地方.3年前,还是个什么都没见过的少年,来到弗兰德的树下,走进了封闭的密室,扭动的封尘已久机关,在石板上知道了这 ...

  10. Kali linux 2016.2(Rolling)里Metasploit的口令猜测与嗅探

    不多说,直接上干货! 对于发现的系统与文件管理类网络服务,比如Telnet.SSH.FTP等,可以进行弱口令的猜测,以及对明文传输口令的嗅探,从而尝试获取直接通过这些服务进入目标网络的通道. 对于SS ...