class Class1
    {
        public bool Read(int i)
        {
            lock (this)
            {
                //需要一段时间,中途不能暂停
            }
            return true;
        }
    }    public partial class Form1 : Form
    {
        private Class1 c1 = new Class();
        private bool isOpen = false;
        private bool isRead = false;        public Form1()
        {
            Thread th = new Thread(new ThreadStart(delegate()
            {
                while (isOpen == true)
                    c1.Read(100);
            }));
            th.Start();
        }        private void btnRead_Click(object sender, EventArgs e)
        {
            isRead = c1.Read(2); //问题在这里,怎样让它执行。 Class1不能修改了。      
        }
    }分数全给有用的回答。

解决方案 »

  1.   

    如果Class1不能修改的话那是没有办法的。因为线程之间是无法互相操作的。
      

  2.   

    谢谢
    那有没有办法把th线程改改,让他每循环一次就去执行Read(2)(如果有的话)。
    广告费100分留下
      

  3.   

                Thread th = new Thread(new ThreadStart(delegate()
                {
                    while (isOpen == true)
                    {
                        c1.Read(100);
                        Thread.Sleep(0);              //主动放弃一下剩余的时间片
                    }
                }));
     
      

  4.   

    gomoku:主线程死在那里了,直到th读完
      

  5.   

    除非你修改Read函数的逻辑,否则不可能实现.一个线程进入lock以后,另一个线程肯定进不去
      

  6.   

    lock是单向锁,即,一旦有一个线程进入lock那么,其它线程就不可能进入这个lock,必须等到进入lock的线程跳出来了lock其它的才能进入...这就是lock常会引发死锁的原因...
      

  7.   

    LZ的要求在逻辑上根本说不通啊
    1.如果你的Read里的代码段要求是原子性的,那么当Read(1000)在运行的时候,你的Read(2)当然不能运行了,必须等Read(1000)结束;
    2.如果Read(1000)在运行的时候可以运行Read(2),那么你的lock就是废的,根本不该加。
    如上