请问在C#中如何实现多线程的同步与互访?
小弟初学多线程
写了个简单的程序,但是运行时提示所访问的控键不是在本线程创建的……
急于求教

解决方案 »

  1.   

    委托~~~
    创建委托,使用本窗体的invoke方法调用委托来操作ui对象的属性
      

  2.   

    呵呵,这个天天有人问。
    同步简单点用lock
    lock(AnyObjectMustNotBeNull)
    {
      //...这段代码同时只允许一个线程访问
    }至于从创建线程外访问控件,两个方法:
    1:
    Form.Check...... = false;
    我不记得了太长了,你自己点一下有得选的。
    2:使用在线程中Invoke某个委托,这个委托会在控件创建的线程中执行。
    比如:
    private void setControl(string s)
    {
      textBox.Text = s;
    }在某个线程中:
    Invoke(setControl,new object[]{s});
      

  3.   

    你说的问题应该是工作线程对主线程的控件进行了操作,
    你可以用control.begininvoke(method)将对UI的操作封送回UI线程,
    无论是委托异步还是多线程都要这样做不然就报错,
    更简单的方法是Ctrl+F5运行就不会报错了或者把Control.CheckForIllegalCrossThreadCalls = false;也可以
      

  4.   

    这个UI线程同非UI线程交互的问题,楼主看了这里会有很大的收获
    通过多线程为基于 .NET 的应用程序实现响应迅速的用户
    http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/misMultithreading.mspx
    为Windows应用创建简单的异步调用模式
    http://www.microsoft.com/china/MSDN/library/architecture/AsynCallPattern.mspx
      

  5.   

    访问控件这些资源必须要用UI线程访问
    这个不是线程同步问题,而是线程安全问题
    楼上说的正解
    Invoke委托