我有以下代码:
VMware.Vim.Task task = new VMware.Vim.Task(Client,thisDC.MoRef);
foreach(VMware.Vim.Task eachTask in task)
{
lvLogging.Items.Add(eachTask.DescriptionId);
}
但是我收到了错误:
foreach statement cannot operate on variables of type 'VMware.Vim.Task' because 'VMware.Vim.Task' does not contain a public definition for 'GetEnumerator'
所以我做了以下事情:
List<VMware.Vim.Task> task = new List<VMware.Vim.Task>();
task = new VMware.Vim.Task(Client,thisDC.MoRef);
但现在我有以下错误:
Cannot implicitly convert type 'VMware.Vim.Task' to 'System.Collections.Generic.List<VMware.Vim.Task>'
我完全迷失在这里? 我要做的是从ESXi主机获取任务,然后发送到ListView。
答案 0 :(得分:0)
您的第一个代码段会尝试枚举单个Task
(不是任务列表),因此会失败。您的第二个代码段会尝试将单个Task
分配给Tasks
列表,因此会失败。
您也在滥用ManagedObjectReference
结构。它不应包含Client
。相反,它应该包含类型字符串(例如“任务”,“VirtualMachine”等)和值(例如“task-123”或“vm-456”)。您应该阅读vSphere SDK编程指南中的relevant section - 这将是您尝试使用的任何API的基础。
我认为这里丢失的基本观点是,您通常不会自己创建 Task
;相反,vSphere API将根据您指定的某些条件向您发送 Task
。获得这些任务的一种方法是通过TaskHistoryCollector,例如here所示。我建议你从该线程中的示例开始,该示例应该很容易从Java转换为C#。看到你可以让它发挥作用,你了解它的作用,然后在需要时发布另一个问题。