InvokeThread里面没做线程同步~

解决方案 »

  1.   

    多线程?
    LZ你用的多CPU的机器?
    CPU原理在同一时间,只运行一个线程
      

  2.   


    private static object obj1 = new object();
            private static object obj2 = new object();
            private static object obj3 = new object();        private void InvokeThread(object i)
            {            try
                {
                    if (this.InvokeRequired)
                    {
                        lock (obj1)
                        {
                            this.Invoke(new myDelegate(Excute1), new object[] { i });
                        }
                        
                    }
                    else
                    {
                        lock (obj2)
                        {
                            Excute1(i);
                        }
                        
                    }            }
                catch (Exception ex)
                {
                    lock (obj3)
                    {
                        log.Debug(ex.Message);
                    }
                    
                }
            }
      

  3.   

    照Hide1984改了之后,变成单线程了我的意思的 多线程对不同的文件进行操作,每个线程同时对不同的文件操作,提高效率
      

  4.   

    ....你需要怎样的多线程,如果你输出线程的执行情况,每个瞬间当然只有一个线程能拿到时间片。
    所以才有所谓的线程同步。
    难道你想同一时间内多个线程同时去执行一个操作??? 那是不可能的。
    多线程只是宏观的,对于CPU来说,永远是每个时间片内只有一个线程能拿到操作权。如果你想看当前是哪个线程在操作,那么for (int i = 0; i < ThreadCount; i++)
                    {
                        System.Threading.Thread thread = new System.Threading.Thread
    (this.InvokeThread);
                        thread.name = "thread"+(i+1);
                        thread.Start(i);
                    }
    try
                {
                    if (this.InvokeRequired)
                    {
                        lock (obj1)
                        {
                            this.Invoke(new myDelegate(Excute1), new object[] { i });
                            Console.WriteLine(Thread.CurrentThread.Name);
                        }
                        
                    }
                    else
                    {
                        lock (obj2)
                        {
                            Excute1(i);
                            Console.WriteLine(Thread.CurrentThread.Name);
                        }
                        
                    }            }
                catch (Exception ex)
                {
                    lock (obj3)
                    {
                        log.Debug(ex.Message);
                        Console.WriteLine(Thread.CurrentThread.Name);
                    }
                    
                }
      

  5.   


    这是我以前写的,楼主看看 【多线程从100减到1】 class ThreadDemo 
        { 
            static object a = new object(); 
            static int i = 100; 
            public static void Main() 
            { 
                Thread threadOne = new Thread(new ThreadStart(Process)); 
                Thread threadTwo = new Thread(new ThreadStart(Process)); 
                threadOne.Name = "线程1"; 
                threadTwo.Name = "线程2"; 
                threadOne.Start(); 
                threadTwo.Start(); 
                Console.ReadKey();         } 
            static private void Process() 
            { 
                while (i > 0) 
                { 
                    lock (a) 
                    { 
                        if (i > 0) 
                        { 
                            i--; 
                            Console.WriteLine(Thread.CurrentThread.Name + "减1 ====> i = " + i); 
                        } 
                    } 
                } 
            } 
        } 运行结果 
    线程1减1 ====> i = 99 
    线程2减1 ====> i = 98 
    线程2减1 ====> i = 97 
    线程2减1 ====> i = 96 
    线程2减1 ====> i = 95 
    线程2减1 ====> i = 94 
    线程2减1 ====> i = 93 
    线程2减1 ====> i = 92 
    线程2减1 ====> i = 91 
    线程2减1 ====> i = 90 
    线程2减1 ====> i = 89 
    线程2减1 ====> i = 88 
    线程2减1 ====> i = 87 
    线程2减1 ====> i = 86 
    线程2减1 ====> i = 85 
    线程2减1 ====> i = 84 
    线程2减1 ====> i = 83 
    线程2减1 ====> i = 82 
    线程2减1 ====> i = 81 
    线程2减1 ====> i = 80 
    线程2减1 ====> i = 79 
    线程2减1 ====> i = 78 
    线程2减1 ====> i = 77 
    线程2减1 ====> i = 76 
    线程2减1 ====> i = 75 
    线程2减1 ====> i = 74 
    线程2减1 ====> i = 73 
    线程2减1 ====> i = 72 
    线程2减1 ====> i = 71 
    线程1减1 ====> i = 70 
    线程1减1 ====> i = 69 
    线程1减1 ====> i = 68 
    线程1减1 ====> i = 67 
    线程1减1 ====> i = 66 
    线程1减1 ====> i = 65 
    线程2减1 ====> i = 64 
    线程2减1 ====> i = 63 
    线程2减1 ====> i = 62 
    线程2减1 ====> i = 61 
    线程2减1 ====> i = 60 
    线程1减1 ====> i = 59 
    线程1减1 ====> i = 58 
    线程1减1 ====> i = 57 
    线程1减1 ====> i = 56 
    线程1减1 ====> i = 55 
    线程1减1 ====> i = 54 
    线程2减1 ====> i = 53 
    线程2减1 ====> i = 52 
    线程2减1 ====> i = 51 
    线程2减1 ====> i = 50 
    线程2减1 ====> i = 49 
    线程2减1 ====> i = 48 
    线程2减1 ====> i = 47 
    线程2减1 ====> i = 46 
    线程2减1 ====> i = 45 
    线程2减1 ====> i = 44 
    线程2减1 ====> i = 43 
    线程1减1 ====> i = 42 
    线程1减1 ====> i = 41 
    线程1减1 ====> i = 40 
    线程1减1 ====> i = 39 
    线程1减1 ====> i = 38 
    线程1减1 ====> i = 37 
    线程2减1 ====> i = 36 
    线程2减1 ====> i = 35 
    线程2减1 ====> i = 34 
    线程2减1 ====> i = 33 
    线程2减1 ====> i = 32 
    线程2减1 ====> i = 31 
    线程2减1 ====> i = 30 
    线程2减1 ====> i = 29 
    线程2减1 ====> i = 28 
    线程1减1 ====> i = 27 
    线程1减1 ====> i = 26 
    线程1减1 ====> i = 25 
    线程1减1 ====> i = 24 
    线程1减1 ====> i = 23 
    线程2减1 ====> i = 22 
    线程2减1 ====> i = 21 
    线程2减1 ====> i = 20 
    线程2减1 ====> i = 19 
    线程2减1 ====> i = 18 
    线程2减1 ====> i = 17 
    线程1减1 ====> i = 16 
    线程1减1 ====> i = 15 
    线程1减1 ====> i = 14 
    线程1减1 ====> i = 13 
    线程1减1 ====> i = 12 
    线程1减1 ====> i = 11 
    线程1减1 ====> i = 10 
    线程2减1 ====> i = 9 
    线程2减1 ====> i = 8 
    线程2减1 ====> i = 7 
    线程2减1 ====> i = 6 
    线程2减1 ====> i = 5 
    线程2减1 ====> i = 4 
    线程2减1 ====> i = 3 
    线程2减1 ====> i = 2 
    线程1减1 ====> i = 1 
    线程1减1 ====> i = 0 
      

  6.   

    学习中,让我理清下思路
    感谢Hide1984
      

  7.   

    我的思路的,
    先定义一个委托,再循环出N个线程,分别Invoke给委托进行处理,
    这个思路难道不行吗?
    这样一个线程控制一个方法,多线程不就是多个委托事件了吗?
      

  8.   

    对于不可再分的耗时操作, 可以用异步线程或异步委托来做,避免UI阻塞
    lz的例子就是这种情况
      

  9.   

    SmartThreadPool  http://www.codeproject.com/KB/threads/smartthreadpool.aspx
      

  10.   

    还是麻烦给个例子吧,感觉AutoResetEvent不是我要的结果