选择<线程>带有Linq的对象



我需要帮助:我有一个嵌套对象与相关线程:

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是错误的方法。

相关内容

  • 没有找到相关文章

最新更新