新建类如何控制窗体中的label

renboy20 2013-02-04 05:02:36
小弟想做了一个新闻抓取的winform程序

其中写了一个数据库操作类operate.cs,这个类有一个静态方法就是把抓取到的新闻添加到数据库里。

都是通过多线程执行到这个静态方法,我想执行了一次这方面,窗体form1中的label就加1。

这需要怎么写呢?
...全文
162 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
gxingmin 2013-02-05
  • 打赏
  • 举报
回复
不在同一个文件里,只要能访问到它就行
renboy20 2013-02-05
  • 打赏
  • 举报
回复
引用 7 楼 gxingmin 的回复:
C# code?123456789101112131415161718192021 public delegate void ThreadHandler(); //先定义委托 private int Count = 0; //抓取图片成功次数 private void Form1_Load(object sender, EventArgs ……
不是在同一文件里
qq181818228 2013-02-05
  • 打赏
  • 举报
回复
把LABLE定义成public,用委托执行就好了
  • 打赏
  • 举报
回复
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(); } }
gxingmin 2013-02-04
  • 打赏
  • 举报
回复
  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();
        }
renboy20 2013-02-04
  • 打赏
  • 举报
回复
引用 3 楼 lye2000000_super 的回复:
用委托。然后操作label的时候锁一下。 这个我前几天刚做过。500个线程操作可以的。
我是winform菜鸟,可以详细点吗
消极怠工 2013-02-04
  • 打赏
  • 举报
回复
<link href="/assets/sh-2364fad8c7dc15e3401b73afdf331470.css" rel="stylesheet" type="text/css" media="all"/>
消极怠工 2013-02-04
  • 打赏
  • 举报
回复
<href>楼上正确</href>
  • 打赏
  • 举报
回复
用委托。然后操作label的时候锁一下。 这个我前几天刚做过。500个线程操作可以的。
renboy20 2013-02-04
  • 打赏
  • 举报
回复
引用 1 楼 lilei_new 的回复:
在执行线程里,调用label.invoke方法
每次执行需要new 一个窗体的类吗
lilei_new 2013-02-04
  • 打赏
  • 举报
回复
在执行线程里,调用label.invoke方法

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧