首页 > 解决方案 > 如何将变量分配给线程以进行状态更新

问题描述

我正在 ac# 控制台应用程序中构建软件

我用于创建线程并将其分配给函数的代码:

Task.Factory.StartNew(() => util.Menu());

我想要做的是有一个显示线程当前状态的菜单,例如:

--THREAD 1--
Status: BUSY

--THREAD 2--
Status: IDLE

ETC...

我该怎么做呢?

标签: c#.netmultithreadingthreadpool

解决方案


现在建议使用Task.Run()而不是Task.Factory.StartNew()TaskFactory.StartNew Method),但是由于两者都返回Task,所以这对我的回答没有影响。

无论您选择哪个都将返回一个任务,您可以将这些任务添加到列表中,然后您可以获得其中任何一个的状态:

List<Task> tasks = new List<Task>();
tasks.Add(Task.Run(() => util.Menu));

然后您可以获取它们的状态:

var status = tasks.Select((t, i) => new { Id = i + 1, t.Status});

和:

foreach(var item in status)
    Console.WriteLine($"--Task {item.Id}--\r\nStatus: {item.Status}");

推荐阅读