C# 快速多线程问题

C# 快速多线程问题,c#,multithreading,.net-3.5,C#,Multithreading,.net 3.5,我有一个启动函数,它调用一个函数,该函数根据设置是否成功返回布尔值。成功时为True,失败时为false。我想在一个新线程上启动该函数,然后检查函数的状态:下面是代码 System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(StartAdapter)); thread.Start(); 我的问题是,在这种情况下,我将如何检查startadapter方法的返回状态?

我有一个启动函数,它调用一个函数,该函数根据设置是否成功返回布尔值。成功时为True,失败时为false。我想在一个新线程上启动该函数,然后检查函数的状态:下面是代码

System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(StartAdapter));
thread.Start();
我的问题是,在这种情况下,我将如何检查startadapter方法的返回状态?因为我的朋友告诉我,我将不知道返回状态,因为它是在另一个线程上启动的,并且正在尝试:

System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(StartAdapter));
thread.Start();
bool result = StartAdapter();
会调用函数两次,这也是我不想要的。有人对此有什么见解吗

在这种情况下,如何检查startadapter函数返回的布尔值


.NET 3.5

在这种情况下,有一个
任务
,它在线程池上执行(例如),并在完成后让您知道返回值

只需使用:



var task = TaskFactory<yourResultType>.StartNew(StartAdapter);
Action<yourResultType> actionAfterResult = ...; // whatever you have to do
task.ContinueWith(actionAfterResult);

// or:
var result = task.Result; // this will block till the result is computed

// or another one of the alternatives you can learn about on MSDN (see link above)


对于这种情况,有一个
任务
,它在线程池上执行(例如),并让您在完成后知道返回值

只需使用:



var task = TaskFactory<yourResultType>.StartNew(StartAdapter);
Action<yourResultType> actionAfterResult = ...; // whatever you have to do
task.ContinueWith(actionAfterResult);

// or:
var result = task.Result; // this will block till the result is computed

// or another one of the alternatives you can learn about on MSDN (see link above)


请注意,如果
任务
在调用
ContinueWith()
之前完成,则不会触发回调。不幸的是,我使用的是Visual Studio C,其中.NET framework为3.5,而您所指的类仅在4中受支持。谢谢你的意见,你知道还有其他的方法吗?@tf.rz恐怕没有!读这个:谢谢@dlev:我把这个放在包里了。=)谢谢你的回答!非常有用的类。很抱歉错过了标记-但是dlev保存了日期注意,如果
任务在调用
ContinueWith()
之前完成,回调将不会启动。不幸的是,我使用的是Visual Studio C,.NET framework是3.5,而您所指的类仅在4中受支持。谢谢你的意见,你知道还有其他的方法吗?@tf.rz恐怕没有!读这个:谢谢@dlev:我把这个放在包里了。=)谢谢你的回答!非常有用的类。很抱歉错过了标记-但是dlev节省了时间。这取决于您想对结果做什么。为什么StartAdapter本身无法处理?但一定要使用任务或线程池。谢谢您的输入,@Henk Holterman。我需要知道它是否设置正确,这样我就可以提示用户是否要重试或继续使用该程序。我计划更改一个标志,该标志将触发GUI上的按钮的启用,而该按钮正是这样做的;允许用户重试该启动。对于UI,适用特殊规则。您将需要WinForms调用或WPF分派。简单得多:找个幕后工作者。谢谢你的提示,@Henk。非常有帮助。:)这取决于你想对结果做什么。为什么StartAdapter本身无法处理?但一定要使用任务或线程池。谢谢您的输入,@Henk Holterman。我需要知道它是否设置正确,这样我就可以提示用户是否要重试或继续使用该程序。我计划更改一个标志,该标志将触发GUI上的按钮的启用,而该按钮正是这样做的;允许用户重试该启动。对于UI,适用特殊规则。您将需要WinForms调用或WPF分派。简单得多:找个幕后工作者。谢谢你的提示,@Henk。非常有帮助。:)