应用线程池(60/217)
3.1、简介
3.2、在线程池中调用委托
using System;using System.Threading;namespace LionelPro{ class Program { static void Main(string[] args) { int threadId = 0; RunOnThreadPool poolDelegate = Test; var t = new Thread(() => Test(out threadId)); t.Start(); t.Join(); Console.WriteLine("Thread id:{0}", threadId); IAsyncResult r = poolDelegate.BeginInvoke(out threadId, Callback, "a delegate asynchronous call"); r.AsyncWaitHandle.WaitOne(); string result = poolDelegate.EndInvoke(out threadId, r); Console.WriteLine("Thread pool worker thread id:{0}", threadId); Console.WriteLine(result); Thread.Sleep(TimeSpan.FromSeconds(2)); } private delegate string RunOnThreadPool(out int threadId); private static void Callback(IAsyncResult ar) { Console.WriteLine("Starting a callback..."); Console.WriteLine("State passed to a callback:{0}", ar.AsyncState); Console.WriteLine("Is thread pool thread:{0}", Thread.CurrentThread.IsThreadPoolThread); Console.WriteLine("Thread pool worker thread id: {0}", Thread.CurrentThread.ManagedThreadId); } private static string Test(out int threadId) { Console.WriteLine("Starting ..."); Console.WriteLine("Is thread pool thread:{0}", Thread.CurrentThread.IsThreadPoolThread); Thread.Sleep(TimeSpan.FromSeconds(2)); threadId = Thread.CurrentThread.ManagedThreadId; return string.Format("Thread pool worker thread id was:{0}", threadId); } }}
3.3、向线程池中放入异步操作
3.4、线程池与并行度
3.5、实现一个勾销选项
3.6、在线程池中应用期待事件处理
3.7、应用计时器
3.8、应用BackgroundWorker组件