从线程c#调用属性

时间:2017-12-18 10:10:47

标签: c# winforms invoke

首先,我正在使用我在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等)?

0 个答案:

没有答案