繁体中文
设为首页
加入收藏
当前位置:.Net技术首页 >> 算法/线程 >> 不错的线程使用示例

不错的线程使用示例

2004-10-01 08:26:10  作者:  来源:互联网  浏览次数:39  文字大小:【】【】【
简介://------------------------------------------------------------------------------ /// <copyright from='1997' to='2001' company='Microsoft Corporation'> ///    Copyright (c...
关键字:示例 线程 不错

//------------------------------------------------------------------------------

///

/// Copyright (c) Microsoft Corporation. All Rights Reserved.

///

/// This source code is intended only as a supplement to Microsoft

/// Development Tools and/or on-line documentation. See these other

/// materials for detailed information regarding Microsoft code samples.

///

///

//------------------------------------------------------------------------------

namespace Microsoft.Samples.Windows.Forms.Cs.ProgressBarCtl {

using System;

using System.Collections;

using System.ComponentModel;

using System.Drawing;

using System.Windows.Forms;

using System.Threading;

//

//

// This class demonstrates the ProgressBar control.

// The ProgressBar is updated periodically via another thread based on the

// settings in this control

//

//

//

public class ProgressBarCtl : System.Windows.Forms.Form {

private System.ComponentModel.Container components;

protected internal System.Windows.Forms.Label label3;

protected internal System.Windows.Forms.Label lblCompleted;

protected internal System.Windows.Forms.TrackBar sldrSpeed;

protected internal System.Windows.Forms.ProgressBar progbar;

protected internal System.Windows.Forms.Label label5;

protected internal System.Windows.Forms.GroupBox grpBehavior;

protected internal System.Windows.Forms.Label label4;

protected internal System.Windows.Forms.Label label6;

protected internal System.Windows.Forms.Label lblValue;

protected internal System.Windows.Forms.ComboBox cmbStep;

private int iSleepTime ;

private Thread timedProgress ;

public ProgressBarCtl() : base() {

//

// Required for Win Form Designer support

//

InitializeComponent();

//

// TODO: Add any constructor code after InitializeComponent call

//

iSleepTime = 100 ;

cmbStep.SelectedIndex = 0 ;

progbar.Step = 1 ;

}

protected override void OnLoad(EventArgs e) {

// Spin off a new thread to update the ProgressBar control

timedProgress = new Thread(new ThreadStart(TimedProgressProc));

timedProgress.IsBackground = true;

timedProgress.Start();

}

//

//

// This code executes on the Windows.Forms thread.

//

//

//

private void UpdateProgress() {

int min ;

double numerator, denominator, completed ;

//Reset to start if required

if (progbar.Value == progbar.Maximum) {

progbar.Value = progbar.Minimum ;

}

else {

progbar.PerformStep();

}

lblValue.Text = progbar.Value.ToString();

min = progbar.Minimum ;

numerator = progbar.Value - min ;

denominator = progbar.Maximum - min ;

completed = (numerator / denominator) * 100.0 ;

lblCompleted.Text = Math.Round(completed).ToString() + "%" ;

}

//

//

// This function runs in the timedProgress thread and updates the

// ProgressBar on the form.

//

//

//

private void TimedProgressProc() {

try {

MethodInvoker mi = new MethodInvoker(UpdateProgress);

while (true) {

Invoke(mi);

int iSleepTime = this.SleepTime;

Thread.Sleep(iSleepTime) ;

}

}

//Thrown when the thread is interupted by the main thread - exiting the loop

catch (ThreadInterruptedException e) {

if (e != null) {}

}

catch (Exception we) {

if (we != null) {

MessageBox.Show(we.ToString());

}

}

}

//

//

// Property controlling the progress of the progress bar - used by the background thread

//

//

//

private int SleepTime {

get {

lock(this) {

return iSleepTime ;

}

}

set {

lock(this) {

iSleepTime = value ;

}

}

}

///

/// Clean up any resources being used

///

public override void Dispose() {

/*

* We have to make sure that our thread doesn't attempt

* to access our controls after we dispose them.

*/

if (timedProgress != null) {

timedProgress.Interrupt();

timedProgress = null;

}

base.Dispose();

components.Dispose();

}

protected void sldrSpeed_Scroll(object sender, EventArgs e) {

TrackBar tb = (TrackBar) sender ;

int time = 110 - tb.Value ;

this.SleepTime = time ;

}

protected void cmbStep_SelectedIndexChanged(object sender, EventArgs e) {

try {

progbar.Step = Int32.Parse((string)cmbStep.SelectedItem);

}

catch (Exception ex) {

// thrown if Int32.Parse can't convert

if (ex !=null) {}

}

}

///

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor

///

private void InitializeComponent() {

this.lblValue = new System.Windows.Forms.Label();

this.label4 = new System.Windows.Forms.Label();

this.label5 = new System.Windows.Forms.Label();

this.progbar = new System.Windows.Forms.ProgressBar();

this.grpBehavior = new System.Windows.Forms.GroupBox();

this.cmbStep = new System.Windows.Forms.ComboBox();

this.label3 = new System.Windows.Forms.Label();

this.sldrSpeed = new System.Windows.Forms.TrackBar();

this.label6 = new System.Windows.Forms.Label();

this.lblCompleted = new System.Windows.Forms.Label();

this.grpBehavior.SuspendLayout();

((System.ComponentModel.ISupportInitialize)(this.sldrSpeed)).BeginInit();

this.SuspendLayout();

//

// lblValue

//

this.lblValue.Location = new System.Drawing.Point(164, 93);

this.lblValue.Name = "lblValue";

this.lblValue.Size = new System.Drawing.Size(72, 18);

this.lblValue.TabIndex = 4;

//

// label4

//

this.label4.Location = new System.Drawing.Point(20, 93);

this.label4.Name = "label4";

this.label4.Size = new System.Drawing.Size(288, 18);

this.label4.TabIndex = 0;

this.label4.Text = "Completion Speed:";

//

// label5

//

this.label5.Location = new System.Drawing.Point(31, 65);

this.label5.Name = "label5";

this.label5.Size = new System.Drawing.Size(143, 28);

this.label5.TabIndex = 1;

this.label5.Text = "Percent Completed:";

//

// progbar

//

this.progbar.BackColor = System.Drawing.SystemColors.Control;

this.progbar.Location = new System.Drawing.Point(31, 28);

this.progbar.Name = "progbar";

this.progbar.Size = new System.Drawing.Size(245, 18);

this.progbar.Step = 1;

this.progbar.TabIndex = 0;

this.progbar.Text = "progbar";

//

// grpBehavior

//

this.grpBehavior.Controls.AddRange(new System.Windows.Forms.Control[] {

this.cmbStep,

this.label3,

this.sldrSpeed,

this.label4});

this.grpBehavior.Location = new System.Drawing.Point(317, 19);

this.grpBehavior.Name = "grpBehavior";

this.grpBehavior.Size = new System.Drawing.Size(318, 175);

this.grpBehavior.TabIndex = 5;

this.grpBehavior.TabStop = false;

this.grpBehavior.Text = "ProgressBar";

//

// cmbStep

//

this.cmbStep.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;

this.cmbStep.DropDownWidth = 123;

this.cmbStep.Items.AddRange(new object[] {

"1",

"5",

"10",

"20"});

this.cmbStep.Location = new System.Drawing.Point(174, 28);

this.cmbStep.Name = "cmbStep";

this.cmbStep.Size = new System.Drawing.Size(123, 20);

this.cmbStep.TabIndex = 7;

this.cmbStep.SelectedIndexChanged += new System.EventHandler(this.cmbStep_SelectedIndexChanged);

//

// label3

//

this.label3.Location = new System.Drawing.Point(20, 28);

this.label3.Name = "label3";

this.label3.Size = new System.Drawing.Size(62, 18);

this.label3.TabIndex = 6;

this.label3.Text = "Step:";

//

// sldrSpeed

//

this.sldrSpeed.BackColor = System.Drawing.SystemColors.Control;

this.sldrSpeed.Location = new System.Drawing.Point(20, 111);

this.sldrSpeed.Maximum = 100;

this.sldrSpeed.Minimum = 10;

this.sldrSpeed.Name = "sldrSpeed";

this.sldrSpeed.Size = new System.Drawing.Size(277, 42);

this.sldrSpeed.TabIndex = 1;

this.sldrSpeed.TabStop = false;

this.sldrSpeed.Text = "trackBar1";

this.sldrSpeed.TickFrequency = 10;

this.sldrSpeed.Value = 10;

this.sldrSpeed.Scroll += new System.EventHandler(this.sldrSpeed_Scroll);

//

// label6

//

this.label6.Location = new System.Drawing.Point(31, 93);

this.label6.Name = "label6";

this.label6.Size = new System.Drawing.Size(128, 18);

this.label6.TabIndex = 3;

this.label6.Text = "Value:";

//

// lblCompleted

//

this.lblCompleted.Location = new System.Drawing.Point(164, 65);

this.lblCompleted.Name = "lblCompleted";

this.lblCompleted.Size = new System.Drawing.Size(72, 18);

this.lblCompleted.TabIndex = 2;

//

// ProgressBarCtl

//

this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);

this.ClientSize = new System.Drawing.Size(647, 202);

this.Controls.AddRange(new System.Windows.Forms.Control[] {

this.grpBehavior,

this.lblValue,

this.label6,

this.lblCompleted,

this.label5,

this.progbar});

this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;

this.MaximizeBox = false;

this.MinimizeBox = false;

this.Name = "ProgressBarCtl";

this.Text = "ProgressBar";

this.Load += new System.EventHandler(this.ProgressBarCtl_Load);

this.grpBehavior.ResumeLayout(false);

((System.ComponentModel.ISupportInitialize)(this.sldrSpeed)).EndInit();

this.ResumeLayout(false);

}

// The main entry point for the application.

[STAThread]

public static void Main(string[] args) {

Application.Run(new ProgressBarCtl());

}

private void ProgressBarCtl_Load(object sender, System.EventArgs e)

{

}

}

}

责任编辑:admin
相关文章