太难理解了,泪奔求解中...

b2bsoho 2011-03-25 10:28:45
太难理解了,

1.多线程 - 委托 - 事件 - UI

2.事件委托的 数据传递 和 更新UI的数据传递 的实现问题


另:
1.普通事件和带数据事件有什么区别?带数据的事件会是哪类的事件?

2.一个线程(不是主线程)要更新UI控件是不是这个线程上也要 事件委托 来通知UI上的控件更新?


本人尝试做个爬虫的小程序,在以上几个问题上耗了几天没个头绪


学过VB,接触C#不是很久,请大侠指教~~~
...全文
198 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
哨子 2011-03-26
  • 打赏
  • 举报
回复
以上代码是在VS2005中写的,拖一个窗体,一个BUTTON控件就行了。
至于事件,它就是程序通知你某件事情己经完成或即要完成的行为,事件是不是带数据,要看它是不是需要。
一个简单的例子Form的load事件是不需要传值的,它仅仅是告诉你Form己经加载完成了,而它的另外一个事件paint则需要参数,某些时候我们需要Form的Graphics及ClipRectangle才能完成我们想要的功能(重绘)
哨子 2011-03-26
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace Te
{
//未做异常处理,仅做简要说明
public partial class Form1 : Form
{
//创建一个多线程的示例
Thread _BgThread;
//创建一个timer1,在timer1的tick事件中让Number的值每次递增加1
System.Windows.Forms.Timer timer1;
//用于测试多线程状态的数字
int Number = 0;
public Form1()
{
InitializeComponent();
timer1 = new System.Windows.Forms.Timer();
timer1.Tick += new EventHandler(timer1_Tick);
timer1.Interval = 200;
}

void timer1_Tick(object sender, EventArgs e)
{
Number++;
}
//运行在多线程中的方法
void ThreadMethod()
{
while (true)
{
//如果不用多线程的话,下面这句话是正确的
//button1.Text = "运行在多线程中的程序" + Number;
//但如果运行多线程的话,必须调用委托
this.Invoke(new delegateMethod(ShowNumber));
//如果需要传参数的话可以使用下面方法
//this.Invoke(new delegate(method),new object[]{method中的参数成员});
}
}
//委托
delegate void delegateMethod();
void ShowNumber()
{
button1.Text = "运行在多线程中的程序" + Number;
}
private void Form1_Load(object sender, EventArgs e)
{
_BgThread = new Thread(new ThreadStart(ThreadMethod));
_BgThread.Start();
timer1.Start();

}
}
}
Shalves 2011-03-26
  • 打赏
  • 举报
回复
事件也好,委托也好,最终去执行的是一个方法,方法可以有参数,当然就可以传数据了。

另外,不同线程控制的资源,好像是必须要通过委托来使用的。
比如在winform里,主线程创建的进度条,其它线程要更改,要通过委托来调用更改进度条的方法

比如 this.BeginInvoke(new MyDelegate(SetProg), z);
cnxry 2011-03-26
  • 打赏
  • 举报
回复
1.多线程 - 委托 - 事件 - UI
线程=进程中某个单一顺序的控制流(进程就是你执行的程序)
委托=简单的概念,类似为c中的函数指针,可以把其他方法做为参数进行传递的方法
事件=封装了windows消息的类
UI=User Interface 用户界面
2.事件委托的 数据传递 和 更新UI的数据传递 的实现问题
这个没看懂你在问什么

另:
1.普通事件和带数据事件有什么区别?带数据的事件会是哪类的事件?
区别就是一个有传数据一个没传?囧
按钮的click就是个带数据的事件

2.一个线程(不是主线程)要更新UI控件是不是这个线程上也要 事件委托 来通知UI上的控件更新?
public delegate void MyInvoke(string str);




private void button9_Click(object sender, EventArgs e)
{
//_myInvoke = new MyInvoke(SetText);
//CheckForIllegalCrossThreadCalls = false;
Thread t = new Thread(new ThreadStart(fun));
t.Start();
}

private void fun()
{
//_myInvoke("dddd");
SetText("ddd");
}
private void SetText(string s)
{
if (textBox6.InvokeRequired)
{
MyInvoke _myInvoke = new MyInvoke(SetText);
this.Invoke(_myInvoke, new object[] { s });
}
else
{
this.textBox6.Text = s;
}
}
本人尝试做个爬虫的小程序,在以上几个问题上耗了几天没个头绪
moonwrite 2011-03-25
  • 打赏
  • 举报
回复
UI 应该就是界面

委托 - 事件
http://www.cnblogs.com/jimmyzhang/archive/2007/09/23/903360.html

线程 -- 这个要看点操作系统知识
快乐大法师 2011-03-25
  • 打赏
  • 举报
回复
也稀里糊涂的 帮顶了
能不能把你的小程序 发过来 也研究一下 sl0703@tom.com

110,529

社区成员

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

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

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