一代軍師
程式語言、理財自我投資、加密貨幣、資訊安全 https://moushih.com/
Thread.CurrentThread.ManagedThreadId
private void doSomething(string name)
{
Console.WriteLine($"doSomething {name}Start 執行緒:{Thread.CurrentThread.ManagedThreadId}");
long lRestul = 0;
for (int i = 0; i < 1000000; i++)
{
lRestul++;
}
Thread.Sleep(2000);
Console.WriteLine($"doSomething {name}End 執行緒:{Thread.CurrentThread.ManagedThreadId}");
}
// Action action = () => this.doSomething("button3");
ThreadStart threadStart = () => this.doSomething("button3");//委派
//Thread thread =new Thread(action);
Thread thread = new Thread(threadStart);
thread.Start();//啟動
thread.Suspend();//執行緒暫停 舊方法-被遺棄了-不建議使用-容易造成死鎖
thread.Resume();//執行緒喚醒 舊方法-被遺棄了-不建議使用
try
{
thread.Abort();//銷毀,方式是拋棄異常 也不建議 不一定及時
}
catch (Exception)
{
Thread.ResetAbort();//取消異常
}
while (thread.ThreadState != ThreadState.Stopped)
{
Thread.Sleep(100);//當前執行緒 休息100ms
}
//執行緒等待
thread.Join(500);//最多等待500
Console.WriteLine("最多等待500ms");
thread.Join();//當前執行緒等待thread完成
//IsBackground 是Thread的特點 只有thread可以設定前台,後台
Console.WriteLine(thread.IsBackground);
//默認是前台線程,啟動後一定要先完成任務的,阻止進程退出
thread.IsBackground = true;//指定後台線程 隨者程式退出
thread.Priority = ThreadPriority.Highest;//設定線程優先級別
//CPU會依優先執行Highest 不代表Highest 就最先結束
ThreadPool.QueueUserWorkItem(t => this.doSomething("button4_Click"));
public static void GetMaxThreads (out int workerThreads, out int completionPortThreads);
ThreadPool.GetAvailableThreads(out int workerThreads,
out int portThreads);
ThreadPool.SetMaxThreads(16, 16);
ThreadPool.SetMinThreads(8, 8);
ManualResetEvent manualResetEvent = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem(t =>
{
this.doSomething("btnThreadPool");
manualResetEvent.Set();
//manualResetEvent.Reset();
});
manualResetEvent.WaitOne();
Console.WriteLine("等待QueueUserWorkItem完成後才執行");
var fun = this.ThreadWidthReturn<int>(() =>
{
Console.WriteLine($"fun 執行緒:{Thread.CurrentThread.ManagedThreadId}");
Thread.Sleep(2000);
return DateTime.Now.Millisecond;
});
Console.WriteLine("123");
int iResult = fun.Invoke();
Console.WriteLine($"{iResult}");private void ThreadWithCallback(Action act, Action callback)
{
Thread thread = new Thread(() =>
{
act.Invoke();
callback.Invoke();
});
thread.Start();
}
var fun = this.ThreadPoolWidthReturn<int>(() =>
{
Console.WriteLine($"fun 執行緒:{Thread.CurrentThread.ManagedThreadId}");
Thread.Sleep(2000);
return DateTime.Now.Millisecond;
});
Console.WriteLine("123");
int iResult = fun.Invoke();
Console.WriteLine($"{iResult}");private Func<T> ThreadWidthReturn<T>(Func<T> func)
{
T t = default(T);
Thread thread = new Thread(() =>
{
t = func.Invoke();
});
Console.WriteLine($"ThreadWidthReturn 執行緒:{Thread.CurrentThread.ManagedThreadId}");
thread.Start();
return () =>
{
thread.Join();
Console.WriteLine($"return 執行緒:{Thread.CurrentThread.ManagedThreadId}");
return t;
};
}