我需要帮助:我有一个嵌套对象与相关线程:
public class XNodeViewModel
{
private int id;
private Thread workerThread;
private bool _alivingThread;
readonly ObservableCollection<XNodeViewModel> _children;
private XNodeViewModel(...)
{
...
if (...)
{
workerThread = new Thread(DoWork) { IsBackground = true };
workerThread.Start();
}
}
public ObservableCollection<XNodeViewModel> Children
{
get { return _children; }
}
public int Level
{
get { return _xnode.Level; }
}
public Thread WorkerThread
{
get { return this.workerThread; }
}
}
在wpf代码中,我引用了这个ViewModel,我想让所有线程obect关联起来。我正在学习Linq和,我知道有函数SelectMany可以压平嵌套对象:有了一个按钮,我想停止所有线程与这个功能:
public void StopAllThread()
{
//_firstGeneration is my root object
var threads = _firstGeneration.SelectMany(x => x.WorkerThread).ToList();
foreach( thread in threads){
workerThread.Abort();
}
}
但编译器告诉我:
错误1无法根据用法推断方法"System.Linq.Enumerable.SelectMany(System.Collections.Generic.IEnumerable,System.Func>)"的类型参数。请尝试显式指定类型参数
只有当我请求键入"线程"时。(如果我请求另一种类型的对象是可以的)我哪里做错了?
您需要使用Select
而不是SelectMany
:
var threads = _firstGeneration.Select(x => x.WorkerThread);
foreach(thread in threads)
workerThread.Abort();
CCD_ 3用于展平列表列表。您的WorkerThread
属性不返回列表,因此SelectMany
是错误的方法。