C# Task多線程與隊列


public static void RunTask (List list, Action action, int threadCount = 5, bool waitFlag = true)
{
ConcurrentQueue queue = new ConcurrentQueue (list);
Task[] tasks = new Task[threadCount];
for (int i = 0; i < threadCount; i++)
{
tasks[i] = Task.Run(() =>
{
T t;
while (queue.TryDequeue(out t))
{
action(t);
}
});
}
if (waitFlag)
{
Task.WaitAll(tasks);
}
}
//調用方法
new System.Threading.Thread(delegate()
{
IP.RunTask(list, _num =>
{
List_int.Dispatcher.Invoke(delegate()
{
List_int.Items.Add(_num + DateTime.Now.ToString("YYYY-MM-dd-mm-ss"));

                });
                //MessageBox.Show();
                System.Threading.Thread.Sleep(2000);
                List_int.Dispatcher.Invoke(delegate()
                {
                    List_int.Items.Add("結束" + _num);
                });
            });
            MessageBox.Show("結束");
        }
           ).Start();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM