c# - 任务、等待和 ManagementObjectCollection

标签 c# winforms asynchronous lambda async-await

我试图使用 Lambda 表达式发现连接到系统的所有逻辑磁盘,并使用 wait 关键字异步执行该函数。除了返回语句之外,一切似乎都很好。

return(Search.Get()); 由于以下错误而无法编译:

"Cannot convert lambda expression to delegate type 'System.Func>' because some of the return types in the block are not implicitly convertible to the delegate return type (CS1662) - D:\PugApplications\Pug_AdvancedControls\Pug_AdvancedControls\Pug_FileSystemTree\Pug_FileSystemNode.cs:34,14

我该怎么做?我读到的所有内容都表明这应该有效。

Pug_DriveType 只是我为镜像 Win32 DriveType 枚举而编写的一个枚举。

//读取驱动器

Func<Pug_DriveType, Task<ManagementObjectCollection>> ReadTask = (Pug_DriveType DT) =>
{

    StringBuilder Query =
        new StringBuilder("SELECT * FROM Win32_LogicalDisk WHERE DriveType=\"")
        .Append((int)DT).Append("\"");

    ManagementObjectSearcher Search = new ManagementObjectSearcher(Query.ToString());

    return (Search.Get());
};

感谢您的帮助 丹尼

最佳答案

我认为你想要更多类似这样的东西:

Func<Pug_DriveType, Task<ManagementObjectCollection>> ReadTask = async (Pug_DriveType DT) =>
{

    StringBuilder Query =
        new StringBuilder("SELECT * FROM Win32_LogicalDisk WHERE DriveType=\"")
        .Append((int)DT).Append("\"");

    ManagementObjectSearcher Search = new ManagementObjectSearcher(Query.ToString());

    return await Task.Run(() => Search.Get());
};

或者可能:

Func<Pug_DriveType, Task<ManagementObjectCollection>> ReadTask = (Pug_DriveType DT) =>
{

    StringBuilder Query =
        new StringBuilder("SELECT * FROM Win32_LogicalDisk WHERE DriveType=\"")
        .Append((int)DT).Append("\"");

    ManagementObjectSearcher Search = new ManagementObjectSearcher(Query.ToString());

    return Task.Run(() => Search.Get());
};

(取决于您最终可能会在其中放入匿名方法的其他内容。)

以上任一情况都会导致您的匿名方法返回 Task<ManagementObjectCollection> ,已声明的委托(delegate)类型变量的返回类型,委托(delegate)实例被分配到该变量。您收到的错误告诉您 lambda 表达式返回的类型与为表达式推断的委托(delegate)类型(基于变量的类型)不同。

关于c# - 任务、等待和 ManagementObjectCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26986011/

相关文章:

c# - 打包/发布任务 Microsoft.Web.Publishing.Tasks.CreateProviderList 无法加载 Web 部署程序集

c# - 面板上的 DrawToBitmap 为空白

javascript - 让 Jasmine 等待异步函数完成

c# - 尝试了解 c# 中的新异步功能

c# - 返回一个长度为 n 的 int 数组,其中包含 pi 的前 n 位数字? (C#)

c# - 依赖属性默认值

c# - 读取文件 A 并附加到文件 B,跳过一些字节

C# 在拖放时在 ListView 中实现自动滚动

c# - 如何从一种形式访问一个类到另一种形式

c# - 在不同线程上更新 UI 的正确方法