1.使用多线程最好的前提就是看资源使用情况,比如说我同时操作多个word,就可以开多线程。但是如果我同时对一个Word操作不同部分,实际上也可以,但是处理起来相当繁琐。2.其实你这种情况可以考虑为你的事件响应开一个后台线程(可以使用BackGroundWorker)一下可以写在你的事件响应函数里: Backgroundworker worker =new Backgroundworker();
worker.DoWork+=new DoWorkEventHandler((sender,e)=>
{
//ToDo
//界面提示数据处理中...
//后台加载数据
});worker.ProgressChanged+= new ProgressChangedEventHandler((sender,e)=>
{
//ToDo
});worker.RunWorkerCompleted+=new RunWorkerCompletedEventHandler((sender,e)=>
{
//数据已加载完毕
});3.剩下的看你的应用场景是否符合多线程
worker.DoWork+=new DoWorkEventHandler((sender,e)=>
{
//ToDo
//界面提示数据处理中...
//后台加载数据
});worker.ProgressChanged+= new ProgressChangedEventHandler((sender,e)=>
{
//ToDo
});worker.RunWorkerCompleted+=new RunWorkerCompletedEventHandler((sender,e)=>
{
//数据已加载完毕
});3.剩下的看你的应用场景是否符合多线程
解决方案 »
- 用C#做一个左右鼠标对换
- 借宝地问个数据库游标问题
- asp.net调用javascript的简单问题
- 用vs2005开发winForm,请大侠推荐下数据库操作的方案?
- 是否存在快捷方法批量自动导出C++DLL的接口为C#声明
- 急问:谁知道微软的Duwamish网上书店.NET完整应用范例的详尽中文资料在哪里?
- 求《c#网路应用案例导航》一书的光盘代码
- 如何在vs.net中实现web应用程序的多人协作开发
- 救救笨猪吧!表中不重复记录数的SQL语句?
- 如何打包资源文件??????????在SDK环境下
- 高手请进!关于comobox问题!
- c# OleDbDataAdapter.Update()手动设置UpdateCommand参数问题?
private Thread eventProcessThread = null;
,在主程序中不注册事件了,注册事件的语句移到了线程eventProcessThread的处理函数中去。
private void EventProcessThreadMethod()
{
this.Server.ConnectionOvertime += new ConnectionOvertimeDelegate(Server_ConnectionOvertime);
this.Server.ServerMessageHandler += new ServerMessageHandlerDelegate(Server_MessageHandler);
}
然后在
private void ServerForm_Load(object sender, EventArgs e)
{
……
eventProcessThread = new Thread(EventProcessThreadMethod);
eventProcessThread.Start();
this.Server.Start();
this.smp = new ServerMessageProcesser(this.Server);//初始化消息处理对象smp,smp负责传输消息事件的具体操作
……
}
我不知道这样的处理是否规范,或者说这样的处理是否将以前的事件处理全部移到了后台线程里面去处理了呢?还望高手指点
应该没有转移事件处理。事件本身的执行流程是在主线程执行到事件触发点时,跳转到你注册的函数执行,再跳转回来。始终是同一线程,与你在哪个线程注册没有关系。建议你研究BackGroundWorker,可以让注册的函数在后台执行,主线程保证有响应。