在一个线程里读取一个ListView的值的时候 
string strUrl = lvURL.Items[0].SubItems[1].Text.Trim().ToString(); 
出现"线程间操作无效: 从不是创建控件“lvURL”的线程访问它。" 

解决方案 »

  1.   

    把下面一段写在你Form1中,线程调用GetValue,而不是直接读取(主界面不是线程安全的)。
    delegate string GetValueDelegate();
    public string GetValue()
    {
       if (this.InvokeRequired )
       {
          return this.Invoke( new GetValueDelegate( GetValue ) ) as string;
       }
       else
       {
          string strUrl = lvURL.Items[0].SubItems[1].Text.Trim().ToString(); 
          return strUrl;
       }
    }
      

  2.   

    关于这个,问题请参考这里,
    通过多线程为基于 .NET 的应用程序实现响应迅速的用户
    http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/misMultithreading.mspx
    为Windows应用创建简单的异步调用模式
    http://www.microsoft.com/china/MSDN/library/architecture/AsynCallPattern.mspx
      

  3.   

    哈哈!.net2.0新限制!
    楼上说的也对。
    对UI元素的访问,必须在UI线程中进行,委托给UI线程即可。
    搜搜吧!很多事例的。
      

  4.   

    用委托操作会影响速度,如果你能确保线程的操作都是在你的控制下的话,可以在窗体的构造函数中加上一句
    Control.CheckForIllegalCrossThreadCalls = false;
    就可以了,最后的结果大概是这样:        public Form1()
            {
                InitializeComponent();
                Control.CheckForIllegalCrossThreadCalls = false;
            }
      

  5.   

    加上Control.CheckForIllegalCrossThreadCalls = false; 
    之后,会去掉挎线程访问的安全检查,采用哪种处理方式要根据需求进行权衡。
    建议一般情况还是用委托