C# C#如何判断线程池中所有的线程是否已经完成,Backgroudworker
来源:互联网 发布:淘宝店家温馨寄语 编辑:程序博客网 时间:2024/06/05 06:21
http://www.cnblogs.com/kisstome88/archive/2009/05/31/1492642.html
C#进度条(Backgroudworker)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace 进度条2
{
public partial class Form1 : Form
{
private BackgroundWorker worker = new BackgroundWorker();
int N = 0;
public Form1()
{
InitializeComponent();
worker.WorkerReportsProgress = true;
worker.WorkerSupportsCancellation = true;
worker.DoWork += new DoWorkEventHandler(DoWork);
worker.ProgressChanged += new ProgressChangedEventHandler(ProgessChanged);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(CompleteWork);
}
public void DoWork(object sender, DoWorkEventArgs e)
{
e.Result = ComputeFibonacci(worker, e);
}
public void ProgessChanged(object sender, ProgressChangedEventArgs e)
{
progressBarX1.Value = e.ProgressPercentage;
int V =(int)( e.ProgressPercentage / N);
progressBarX1.Text = Convert.ToString(V) + "%";
}
public void CompleteWork(object sender, RunWorkerCompletedEventArgs e)
{
progressBarX1.Text = "处理完毕!";
}
private int ComputeFibonacci(object sender, DoWorkEventArgs e)
{
for (int i = 0; i <= 92800; i++)
{
if (worker.CancellationPending)
{
e.Cancel = true;
return -1;
}
else
{
worker.ReportProgress(i); //引发ProgessChanged事件
}
}
return -1;
}
private void btnStart_Click(object sender, EventArgs e)
{
N = 92800 / 100;
progressBarX1.Maximum = 92800;
worker.RunWorkerAsync(); //开始执行后台操作
}
private void btnPause_Click(object sender, EventArgs e)
{
worker.CancelAsync(); //请求暂停后台操作
}
}
}
C#如何判断线程池中所有的线程是否已经完成
http://www.soaspx.com/dotnet/csharp/csharp_20090918_381.html其实很简单用ThreadPool.RegisterWaitForSingleObject方法注册一个定时检查线程池的方法,在检查线程的方法内调用ThreadPool.GetAvailableThreads与ThreadPool.GetMaxThreads并比较两个方法返回的值是不是相等,相等表示线池内所有的线程已经完成.
RegisteredWaitHandle rhw = ThreadPool.RegisterWaitForSingleObject(AutoResetEvent(false), this.CheckThreadPool, null, 1000, false);
//检查线程池的方法
private void CheckThreadPool(object state, bool timeout)
{
int workerThreads = 0;
int maxWordThreads = 0;
//int
int compleThreads = 0;
ThreadPool.GetAvailableThreads(out workerThreads, out compleThreads);
ThreadPool.GetMaxThreads(out maxWordThreads, out compleThreads);
//当可用的线数与池程池最大的线程相等时表示线程池中所有的线程已经完成
if (workerThreads == maxWordThreads)
{
//当执行此方法后CheckThreadPool将不再执行
rhw.Unregister(null);
//此处加入所有线程完成后的处理代码
}
}
C#窗口总是显示在最前面
private void Form1_Load(object sender, EventArgs e)
{
this.TopMost = true; //窗体总在最前
this.StartPosition = FormStartPosition.CenterScreen; //设置窗体的位置
this.FormBorderStyle = FormBorderStyle.None; // 窗口最大化时不显示任务栏。
this.WindowState = FormWindowState.Maximized; //窗口最大化。
}
//--------------------------------弹出窗口方式打开窗口。
form1 fnew = new form1();
fnew.ShowDialog();
还可以判断state,校验所有的线程是否是真
Component.DesignMode 属性用于判断组件是否处于IDE设计状态,但不能在构造函数中判断,因为组件还未建立完成,可以置于组件载入的事件中,如:Form的load事件。
如果要在构造函数中判断,可以用:
if(System.Diagnostics.Process.GetCurrentProcess().ProcessName == "devenv")
{
//你的代码
}
- C# C#如何判断线程池中所有的线程是否已经完成,Backgroudworker
- C#判断线程池中所有的线程是否已经完成
- C#中如何判断当前线程是否为主线程
- C#中如何判断当前线程是否为主线程
- C#定时检测子线程是否已经完成
- C# BackgroudWorker
- C#中判断线程的状态
- Java如何判断线程池所有任务是否执行完毕
- Java如何判断线程池所有任务是否执行完毕
- Java如何判断线程池所有任务是否执行完毕
- Java 如何判断线程池所有任务是否执行完毕
- Java如何判断线程池所有任务是否执行完毕
- Java 如何判断线程池所有任务是否执行完毕
- Java 如何判断线程池所有任务是否执行完毕
- Java 如何判断线程池所有任务是否执行完毕
- Java如何判断线程池所有任务是否执行完毕
- Java 如何判断线程池所有任务是否执行完毕
- Java如何判断线程池所有任务是否执行完毕
- 第十六周实验报告2
- java 邮件操作 email
- 设置默认表空间
- ios获取本地图片以及图片信息
- 猪哥的公房菜(转载)
- C# C#如何判断线程池中所有的线程是否已经完成,Backgroudworker
- A*寻路算法
- android平台linux常见编译警告提示及解决方法
- explicit构造函数
- flex 显示当前时间
- android 背景渐变色(shape,gradient)
- JS中URL中的特殊字符问题(escape,encodeURI,encodeURIComponent)
- SQL2005,2008备份集中的数据库备份与现有的 'DB' 数据库不同,错误号码:3154,解决方法
- 为S3C6410,S5PC110等ARM平台快速构建一个Meego环境