XFEExtension
【DLL】XFE各类拓展是一个C#的DLL库,旨在优化C#代码中常用语句的使用,并提供更简洁的访问方式,同时提供Xunit测试框架,快速搭建服务器/客户端,免费ChatGPTAPI接口,免费通讯服务器,XFE下载器,新增格式等
关注
0
Fork
0
Star
0
namespace XFEExtension.NetCore.ThreadExtension;
/// <summary>
/// 线程的拓展
/// </summary>
public static class ThreadExtension
{
#region 等待线程状态
/// <summary>
/// 等待指定线程组的所有线程完成
/// </summary>
/// <param name="threads"></param>
/// <returns>等待任务</returns>
public static Task WaitThreadListComplete(this List<Thread> threads)
{
return Task.Run(() =>
{
while (true)
{
bool isAllThreadComplete = true;
foreach (var thread in threads)
{
if (thread.ThreadState != ThreadState.Stopped)
{
isAllThreadComplete = false;
break;
}
}
if (isAllThreadComplete)
{
break;
}
}
});
}
/// <summary>
/// 等待指定线程组的所有线程达到指定状态
/// </summary>
/// <param name="threads"></param>
/// <param name="threadState">线程的状态</param>
/// <returns></returns>
public static Task WaitThreadListComplete(this List<Thread> threads, ThreadState threadState)
{
return Task.Run(() =>
{
while (true)
{
bool isAllThreadComplete = true;
foreach (var thread in threads)
{
if (thread.ThreadState != threadState)
{
isAllThreadComplete = false;
break;
}
}
if (isAllThreadComplete)
{
break;
}
}
});
}
/// <summary>
/// 等待指定线程完成
/// </summary>
/// <param name="thread"></param>
/// <returns>等待任务</returns>
public static Task WaitThreadComplete(this Thread thread)
{
return Task.Run(() => { while (thread.ThreadState != ThreadState.Stopped) ; });
}
/// <summary>
/// 等待指定线程达到指定状态
/// </summary>
/// <param name="thread"></param>
/// <param name="threadState">线程的状态</param>
/// <returns></returns>
public static Task WaitThreadComplete(this Thread thread, ThreadState threadState)
{
return Task.Run(() => { while (thread.ThreadState != threadState) ; });
}
#endregion
#region 新建线程并开始
/// <summary>
/// 新建一个线程并开始
/// </summary>
/// <param name="method">线程方法</param>
/// <param name="parameter">传递的参数</param>
/// <returns></returns>
public static Thread StartNewThread(ParameterizedThreadStart method, object parameter)
{
Thread thread = new(method);
thread.Start(parameter);
return thread;
}
/// <summary>
/// 新建一个线程并开始
/// </summary>
/// <param name="method">线程方法</param>
/// <returns></returns>
public static Thread StartNewThread(ThreadStart method)
{
Thread thread = new(method);
thread.Start();
return thread;
}
/// <summary>
/// 新建一个线程并开始
/// </summary>
/// <param name="method">线程方法</param>
/// <param name="parameter">传递的参数</param>
/// <param name="apartmentState">线程的状态</param>
/// <returns></returns>
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static Thread StartNewThread(ParameterizedThreadStart method, object parameter, ApartmentState apartmentState)
{
Thread thread = new(method);
#if WINDOWS
thread.SetApartmentState(apartmentState);
#endif
thread.Start(parameter);
return thread;
}
/// <summary>
/// 新建一个线程并开始
/// </summary>
/// <param name="method">线程方法</param>
/// <param name="apartmentState">线程的状态</param>
/// <returns></returns>
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static Thread StartNewThread(ThreadStart method, ApartmentState apartmentState)
{
Thread thread = new(method);
#if WINDOWS
thread.SetApartmentState(apartmentState);
#endif
thread.Start();
return thread;
}
#endregion
}
namespace XFEExtension.NetCore.ThreadExtension;
/// <summary>
/// 线程的拓展
/// </summary>
public static class ThreadExtension
{
#region 等待线程状态
/// <summary>
/// 等待指定线程组的所有线程完成
/// </summary>
/// <param name="threads"></param>
/// <returns>等待任务</returns>
public static Task WaitThreadListComplete(this List<Thread> threads)
{
return Task.Run(() =>
{
while (true)
{
bool isAllThreadComplete = true;
foreach (var thread in threads)
{
if (thread.ThreadState != ThreadState.Stopped)
{
isAllThreadComplete = false;
break;
}
}
if (isAllThreadComplete)
{
break;
}
}
});
}
/// <summary>
/// 等待指定线程组的所有线程达到指定状态
/// </summary>
/// <param name="threads"></param>
/// <param name="threadState">线程的状态</param>
/// <returns></returns>
public static Task WaitThreadListComplete(this List<Thread> threads, ThreadState threadState)
{
return Task.Run(() =>
{
while (true)
{
bool isAllThreadComplete = true;
foreach (var thread in threads)
{
if (thread.ThreadState != threadState)
{
isAllThreadComplete = false;
break;
}
}
if (isAllThreadComplete)
{
break;
}
}
});
}
/// <summary>
/// 等待指定线程完成
/// </summary>
/// <param name="thread"></param>
/// <returns>等待任务</returns>
public static Task WaitThreadComplete(this Thread thread)
{
return Task.Run(() => { while (thread.ThreadState != ThreadState.Stopped) ; });
}
/// <summary>
/// 等待指定线程达到指定状态
/// </summary>
/// <param name="thread"></param>
/// <param name="threadState">线程的状态</param>
/// <returns></returns>
public static Task WaitThreadComplete(this Thread thread, ThreadState threadState)
{
return Task.Run(() => { while (thread.ThreadState != threadState) ; });
}
#endregion
#region 新建线程并开始
/// <summary>
/// 新建一个线程并开始
/// </summary>
/// <param name="method">线程方法</param>
/// <param name="parameter">传递的参数</param>
/// <returns></returns>
public static Thread StartNewThread(ParameterizedThreadStart method, object parameter)
{
Thread thread = new(method);
thread.Start(parameter);
return thread;
}
/// <summary>
/// 新建一个线程并开始
/// </summary>
/// <param name="method">线程方法</param>
/// <returns></returns>
public static Thread StartNewThread(ThreadStart method)
{
Thread thread = new(method);
thread.Start();
return thread;
}
/// <summary>
/// 新建一个线程并开始
/// </summary>
/// <param name="method">线程方法</param>
/// <param name="parameter">传递的参数</param>
/// <param name="apartmentState">线程的状态</param>
/// <returns></returns>
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static Thread StartNewThread(ParameterizedThreadStart method, object parameter, ApartmentState apartmentState)
{
Thread thread = new(method);
#if WINDOWS
thread.SetApartmentState(apartmentState);
#endif
thread.Start(parameter);
return thread;
}
/// <summary>
/// 新建一个线程并开始
/// </summary>
/// <param name="method">线程方法</param>
/// <param name="apartmentState">线程的状态</param>
/// <returns></returns>
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static Thread StartNewThread(ThreadStart method, ApartmentState apartmentState)
{
Thread thread = new(method);
#if WINDOWS
thread.SetApartmentState(apartmentState);
#endif
thread.Start();
return thread;
}
#endregion
}