首先,我正在使用我在StackOverflow上找到的“最快”调用调用,如果可能的话,我想坚持下去。
当我需要将一个项目从一个线程添加到我的WindowsForm上的listview时,我称之为:
lv_ProcessMonitor.Invoke(new Action(() => lv_ProcessMonitor.Items.Add(item)));
但是当我需要在相同的线程中访问它的项目,或者阅读项目的标签时,我不知道如何正确调用,或者如果我甚至不得不:
foreach(ListViewItem item in lv_ProcessMonitor.Items)
{
if (item.SubItems[1].Text == "Running")
{
Process p = item.Tag as Process; <--- THIS THROWS ERROR
if (!p.HasExited)
{
process_buttons[p.ProcessName].Enabled = false;
}
}
else if (item.SubItems[1].Text == "Not Running")
{
process_buttons[item.SubItems[0].Text].Enabled = true;
}
}
如上面的代码所示,我标记的行在运行时使用代码“Access denied”(Win32Exception)抛出错误。我想这是因为我没有调用我通过foreach获得的单个项目。
所以问题是:你如何使用上面提到的最简单的方法调用这样的属性(Tag,Subitems等)?