检查BackgroundWorker中的listbox.SelectedIndex == listbox.Items.Count

时间:2017-09-20 02:32:30

标签: c# multithreading listbox

我必须检查列表框的BackgroundWorker是否在BackgroundWorker的最后一个索引处,但是因为我正在检查{{1}中的列表框(在GUI线程上)我收到此错误:

  

System.InvalidOperationException:'跨线程操作无效:控制'listBox1'从其创建的线程以外的线程访问。'

这是我的代码:

if (listBox1.SelectedIndex == listBox1.Items.Count)
{
//code here
}

如何在不使用GUI线程的情况下使if语句正常工作?

1 个答案:

答案 0 :(得分:-1)

当您从另一个线程访问forms属性时,这基本上就会发生,这就是抛出此异常的原因。您的UI操作必须在拥有的线程上执行。

你可以这样做:

prefixProvider

然后你的情况在这里:

 int intIndex = 0;
 int intCount = 0;
        if (listBox1.InvokeRequired)
        {
            listBox1.Invoke(new MethodInvoker(delegate { intIndex = listBox1.SelectedIndex ; }));
        }

        if (listBox1.InvokeRequired)
        {
            listBox1.Invoke(new MethodInvoker(delegate { intCount = listBox1.Items.Count; }));
        }

或者你可以做这个快速修复,但不建议生产,但你可以做开发。您可以在构造函数Form上添加它:

        if (intIndex == intCount)
        {
            // TODO: Business Logic
        }