Csharp/C Sharp by API/System.Threading/Thread
Содержание
- 1 new Thread()
- 2 Thread.Abort()
- 3 Thread.AllocateDataSlot
- 4 Thread.AllocateNamedDataSlot
- 5 Thread.CurrentContext
- 6 Thread.CurrentCulture
- 7 Thread.CurrentThread
- 8 Thread.GetData
- 9 Thread.GetHashCode()
- 10 Thread.Interrupt()
- 11 Thread.IsAlive
- 12 Thread.IsBackground
- 13 Thread.Join()
- 14 Thread.ResetAbort()
- 15 Thread.SetData
- 16 Thread.Sleep
- 17 Thread.ThreadState
new Thread()
<source lang="csharp"> using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime; using System.Threading; using System.Runtime.rupilerServices; using System.Security; using System.Text; public class MainClass {
public static void Main() { Thread paramThread = new Thread(ParameterizedWorkerOperation); paramThread.Start("Test"); paramThread.Join(); } private static void ParameterizedWorkerOperation(object o) { Console.WriteLine("Param worker: {0}", o); }
}
</source>
Thread.Abort()
<source lang="csharp"> using System; using System.Threading; class MainClass {
static int MyCount = 0; static void Main(string[] args) { MyClassThread me = new MyClassThread(); Thread MyNewThread = new Thread(new ThreadStart(me.MyThread)); MyNewThread.Start(); if (MyCount == 0) MyNewThread.Abort(); }
} class MyClassThread {
public void MyThread() { }
}
</source>
Thread.AllocateDataSlot
<source lang="csharp"> using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime; using System.Runtime.rupilerServices; using System.Security; using System.Text; using System.Threading; public class MainClass {
public static void Main() { LocalDataStoreSlot slot = Thread.AllocateDataSlot(); Thread.SetData(slot, 63); int slotValue1 = (int)Thread.GetData(slot); Console.WriteLine(slotValue1); }
}
</source>
Thread.AllocateNamedDataSlot
<source lang="csharp"> using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime; using System.Runtime.rupilerServices; using System.Security; using System.Text; using System.Threading;
public class MainClass {
public static void Main() { Thread.SetData(Thread.AllocateNamedDataSlot("TestSlot"), 126); int slotValue2 = (int)Thread.GetData(Thread.GetNamedDataSlot("TestSlot")); Console.WriteLine(slotValue2); }
}
</source>
Thread.CurrentContext
<source lang="csharp">
using System; using System.Threading; class Program {
static void Main(string[] args) { Thread primaryThread = Thread.CurrentThread; primaryThread.Name = "ThePrimaryThread"; Console.WriteLine("Name of current AppDomain: {0}", Thread.GetDomain().FriendlyName); Console.WriteLine("ID of current Context: {0}", Thread.CurrentContext.ContextID); Console.WriteLine("Thread Name: {0}", primaryThread.Name); Console.WriteLine("Has thread started?: {0}", primaryThread.IsAlive); Console.WriteLine("Priority Level: {0}", primaryThread.Priority); Console.WriteLine("Thread State: {0}", primaryThread.ThreadState); }
}
</source>
Thread.CurrentCulture
<source lang="csharp"> using System; using System.Globalization; using System.Threading; class MainClass {
public static void Main() { Console.WriteLine(Thread.CurrentThread.CurrentCulture.Name);
}
}
</source>
Thread.CurrentThread
<source lang="csharp">
using System; using System.Globalization; using System.Threading; class MainClass {
public static void Main() { Thread.CurrentThread.CurrentCulture=new CultureInfo("de-DE");
}
}
</source>
Thread.GetData
<source lang="csharp"> using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime; using System.Runtime.rupilerServices; using System.Security; using System.Threading; using System.Text; public class MainClass {
public static void Main() { LocalDataStoreSlot slot = Thread.AllocateDataSlot(); Thread.SetData(slot, 63); int slotValue1 = (int)Thread.GetData(slot); Console.WriteLine(slotValue1); }
}
</source>
Thread.GetHashCode()
<source lang="csharp">
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
class AddParams {
public int a; public int b; public AddParams(int numb1, int numb2) { a = numb1; b = numb2; }
} class Program {
public static void Add(object data) { if (data is AddParams) { Console.WriteLine("ID of thread in Add(): {0}",Thread.CurrentThread.GetHashCode()); AddParams ap = (AddParams)data; Console.WriteLine("{0} + {1} is {2}", ap.a, ap.b, ap.a + ap.b); } } static void Main(string[] args) { Console.WriteLine("ID of thread in Main(): {0}", Thread.CurrentThread.GetHashCode()); AddParams ap = new AddParams(10, 10); Thread t = new Thread(new ParameterizedThreadStart(Add)); t.Start(ap); Console.ReadLine(); }
}
</source>
Thread.Interrupt()
<source lang="csharp"> using System; using System.Drawing; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; using System.Threading; public class Form1 : System.Windows.Forms.Form {
private System.Windows.Forms.ProgressBar progressBar1; private System.Windows.Forms.Button button1; private System.Windows.Forms.Button button2; private Thread fThread = null; private System.ruponentModel.Container components = null; public Form1() { this.progressBar1 = new System.Windows.Forms.ProgressBar(); this.button1 = new System.Windows.Forms.Button(); this.button2 = new System.Windows.Forms.Button(); this.SuspendLayout(); this.progressBar1.Location = new System.Drawing.Point(24, 32); this.progressBar1.Name = "progressBar1"; this.progressBar1.Size = new System.Drawing.Size(264, 23); this.progressBar1.TabIndex = 0; this.button1.Location = new System.Drawing.Point(24, 80); this.button1.Size = new System.Drawing.Size(136, 40); this.button1.Text = "Start Thread"; this.button1.Click += new System.EventHandler(this.button1_Click); this.button2.Location = new System.Drawing.Point(168, 80); this.button2.Size = new System.Drawing.Size(120, 40); this.button2.Text = "Stop Thread"; this.button2.Click += new System.EventHandler(this.button2_Click); this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(704, 429); this.Controls.AddRange(new System.Windows.Forms.Control[] { this.button2, this.button1, this.progressBar1}); this.ResumeLayout(false); } protected override void Dispose(bool disposing) { if (fThread != null) { fThread.Interrupt(); fThread = null; } } [STAThread] static void Main() { Application.Run(new Form1()); } private void UpdateProgress() { if (progressBar1.Value == progressBar1.Maximum) { progressBar1.Value = progressBar1.Minimum; } progressBar1.PerformStep(); }
public void ThreadProc() { try { MethodInvoker mi = new MethodInvoker(this.UpdateProgress); while (true) { this.BeginInvoke(mi); Thread.Sleep(500); } } catch (ThreadInterruptedException e) { Console.WriteLine( "Interruption Exception in Thread: {0}", e); } catch (Exception we) { Console.WriteLine("Exception in Thread: {0}", we); } } private void button1_Click(object sender, System.EventArgs e) { fThread = new Thread(new ThreadStart(ThreadProc)); fThread.IsBackground = true; fThread.Start(); } private void button2_Click(object sender, System.EventArgs e) { fThread.Interrupt(); fThread = null; }
}
</source>
Thread.IsAlive
<source lang="csharp"> using System; using System.Threading; public class ThreadState {
static void WorkerFunction() { for (int i = 1; i < 50000; i++) { Console.WriteLine("Worker: " + Thread.CurrentThread.ThreadState); } }
static void Main() { string ThreadState; Thread t = new Thread(new ThreadStart(WorkerFunction)); t.Start(); while (t.IsAlive) { Console.WriteLine("Still waiting. I"m going back to sleep."); Thread.Sleep(200); } Console.WriteLine(t.ThreadState); }
}
</source>
Thread.IsBackground
<source lang="csharp"> using System; using System.Drawing; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; using System.Threading; public class Form1 : System.Windows.Forms.Form {
private System.Windows.Forms.ProgressBar progressBar1; private System.Windows.Forms.Button button1; private System.Windows.Forms.Button button2; private Thread fThread = null; private System.ruponentModel.Container components = null; public Form1() { this.progressBar1 = new System.Windows.Forms.ProgressBar(); this.button1 = new System.Windows.Forms.Button(); this.button2 = new System.Windows.Forms.Button(); this.SuspendLayout(); this.progressBar1.Location = new System.Drawing.Point(24, 32); this.progressBar1.Name = "progressBar1"; this.progressBar1.Size = new System.Drawing.Size(264, 23); this.progressBar1.TabIndex = 0; this.button1.Location = new System.Drawing.Point(24, 80); this.button1.Size = new System.Drawing.Size(136, 40); this.button1.Text = "Start Thread"; this.button1.Click += new System.EventHandler(this.button1_Click); this.button2.Location = new System.Drawing.Point(168, 80); this.button2.Size = new System.Drawing.Size(120, 40); this.button2.Text = "Stop Thread"; this.button2.Click += new System.EventHandler(this.button2_Click); this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(704, 429); this.Controls.AddRange(new System.Windows.Forms.Control[] { this.button2, this.button1, this.progressBar1}); this.ResumeLayout(false); } protected override void Dispose(bool disposing) { if (fThread != null) { fThread.Interrupt(); fThread = null; } } [STAThread] static void Main() { Application.Run(new Form1()); } private void UpdateProgress() { if (progressBar1.Value == progressBar1.Maximum) { progressBar1.Value = progressBar1.Minimum; } progressBar1.PerformStep(); }
public void ThreadProc() { try { MethodInvoker mi = new MethodInvoker(this.UpdateProgress); while (true) { this.BeginInvoke(mi); Thread.Sleep(500); } } catch (ThreadInterruptedException e) { Console.WriteLine( "Interruption Exception in Thread: {0}", e); } catch (Exception we) { Console.WriteLine("Exception in Thread: {0}", we); } } private void button1_Click(object sender, System.EventArgs e) { fThread = new Thread(new ThreadStart(ThreadProc)); fThread.IsBackground = true; fThread.Start(); } private void button2_Click(object sender, System.EventArgs e) { fThread.Interrupt(); fThread = null; }
}
</source>
Thread.Join()
<source lang="csharp"> using System; using System.Threading;
class Sum {
public Sum(int op1, int op2) { Console.WriteLine("[Sum.Sum] Instantiated with values of {0} and {1}", op1, op2); this.op1 = op1; this.op2 = op2; } int op1; int op2; int result; public int Result{ get { return result; } } public void Add() { Thread.Sleep(5000); result = op1 + op2; }
}
class ThreadData {
static void Main() { Sum sum = new Sum(6, 42); Thread thread = new Thread(new ThreadStart(sum.Add)); thread.Start(); for (int i = 0; i < 10; i++) { Thread.Sleep(200); Console.Write("."); } thread.Join(); Console.WriteLine("[Main] The result is {0}", sum.Result); Console.ReadLine(); }
}
</source>
Thread.ResetAbort()
<source lang="csharp"> using System; using System.Threading;
class MyThread {
public Thread thrd; public MyThread(string name) { thrd = new Thread(this.run); thrd.Name = name; thrd.Start(); } void run() { Console.WriteLine(thrd.Name + " starting."); for(int i = 1; i <= 100; i++) { try { Console.Write(i + " "); Thread.Sleep(50); } catch(ThreadAbortException exc) { if((int)exc.ExceptionState == 0) { Console.WriteLine("Abort Cancelled! Code is " + exc.ExceptionState); Thread.ResetAbort(); } else Console.WriteLine("Thread aborting, code is " + exc.ExceptionState); } } Console.WriteLine(thrd.Name + " exiting normally."); }
}
class MainClass {
public static void Main() { MyThread mt1 = new MyThread("My Thread"); Thread.Sleep(1000); Console.WriteLine("Stopping thread."); mt1.thrd.Abort(100); mt1.thrd.Join(); Console.WriteLine("Main thread terminating."); }
}
</source>
Thread.SetData
<source lang="csharp"> using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime; using System.Runtime.rupilerServices; using System.Security; using System.Text; using System.Threading; public class MainClass {
public static void Main() { LocalDataStoreSlot slot = Thread.AllocateDataSlot(); Thread.SetData(slot, 63); int slotValue1 = (int)Thread.GetData(slot); Console.WriteLine(slotValue1); }
}
</source>
Thread.Sleep
<source lang="csharp">
using System;
using System.Threading;
class MyThread {
public int count; public Thread thrd; public MyThread(string name) { count = 0; thrd = new Thread(this.run); thrd.Name = name; thrd.Start(); } void run() { Console.WriteLine(thrd.Name + " starting."); do { Thread.Sleep(500); Console.WriteLine("In " + thrd.Name + ", count is " + count); count++; } while(count < 10); Console.WriteLine(thrd.Name + " terminating."); }
}
class MainClass {
public static void Main() { Console.WriteLine("Main thread starting."); MyThread mt1 = new MyThread("Child #1"); MyThread mt2 = new MyThread("Child #2"); MyThread mt3 = new MyThread("Child #3"); Thread.Sleep(10000); Console.WriteLine("Main thread ending."); }
}
</source>
Thread.ThreadState
<source lang="csharp"> using System; using System.Threading; class MainClass {
static void MyThreadProc() { Thread.CurrentThread.Name = "TheSecondaryThread"; Thread secondaryThread = Thread.CurrentThread; Console.WriteLine("Name? {0}", secondaryThread.Name); Console.WriteLine("Alive? {0}", secondaryThread.IsAlive); Console.WriteLine("Priority? {0}", secondaryThread.Priority); Console.WriteLine("State? {0}", secondaryThread.ThreadState); Console.WriteLine(); for(int i = 0; i < 1000; i ++) { Console.WriteLine("Value of i is: {0}", i); Thread.Sleep(5); } } [MTAThread] static void Main(string[] args) { Thread secondaryThread = new Thread(new ThreadStart(MyThreadProc)); secondaryThread.Priority = ThreadPriority.Highest; secondaryThread.IsBackground = true; secondaryThread.Start(); }
}
</source>