小弟想做了一个新闻抓取的winform程序其中写了一个数据库操作类operate.cs,这个类有一个静态方法就是把抓取到的新闻添加到数据库里。都是通过多线程执行到这个静态方法,我想执行了一次这方面,窗体form1中的label就加1。这需要怎么写呢?winform多线程

解决方案 »

  1.   

    在执行线程里,调用label.invoke方法
      

  2.   


    每次执行需要new 一个窗体的类吗
      

  3.   

    用委托。然后操作label的时候锁一下。
    这个我前几天刚做过。500个线程操作可以的。
      

  4.   

    <link href="/assets/sh-2364fad8c7dc15e3401b73afdf331470.css" rel="stylesheet" type="text/css" media="all"/>
      

  5.   

    我是winform菜鸟,可以详细点吗
      

  6.   

      public delegate void ThreadHandler(); //先定义委托
            private int Count = 0; //抓取图片成功次数        private void Form1_Load(object sender, EventArgs e)
            {
                new System.Threading.Thread(new System.Threading.ThreadStart(ThreadFun)).Start(); //开启线程
            }        private void ThreadFun()
            {
                ThreadHandler hander = new ThreadHandler(Work);
                hander.Invoke();
            }        private void Work()
            {
                if (抓取图片静态函数()) //抓取成功
                    Count++;
                Label1.Text = Count.ToString();
                Label1.Refresh();
            }
      

  7.   

             private object sendLock = new object();
            private delegate void SendedMsg();
            private void frm_Load(object sender, EventArgs e)
            {
    createThreads();
            }        /// <summary>
            /// 送信スレッドポールを作成する
            /// </summary>
            private void createThreads()
            {
                
                int iRemain;
                int iCount = Math.DivRem(this.iCurrentThreadCount, 100, out iRemain);
                for (int i = 1; i <= iCount; i++)
                {
                    for (int j = 1; j <= 100; j++)
                    {
                        String strIpAddress = String.Format(strFormatIpAddress, i, j);
                        Thread thread = new Thread(new ParameterizedThreadStart(
                        delegate(object ipAddress)
                        {
                            threadSend(ipAddress.ToString());
                        }));
                        thread.Start(strIpAddress);
                    }
                }
                iCount++;
                for (int i = 1; i <= iRemain; i++)
                {
                    String strIpAddress = String.Format(strFormatIpAddress, iCount, i);
                    Thread thread = new Thread(new ParameterizedThreadStart(
                    delegate(object ipAddress)
                    {
                        threadSend(ipAddress);
                    }));
                    thread.Start(strIpAddress);
                }
            }        private void threadSend(object strIpAddress)
            {
                try
                {
    Invoke(new SendedMsg(this.sendMessage));            }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                    Debug.WriteLine(ex);
                }
                finally
                {
                    Thread.CurrentThread.Abort();
                }
            }       private void sendMessage()
            {
                lock (this.sendLock)
                {
                    int iSendCount = int.Parse(this.lblCount.Text) + 1;
                    lblCount.Text = iSendCount.ToString();
                }
            }
      

  8.   

    把LABLE定义成public,用委托执行就好了