有时候,我都真想直接去商场门口发传单,举牌子了
请一定帮忙,谢谢!
请看看:
http://community.csdn.net/Expert/topic/3663/3663763.xml?temp=.569195
请一定帮忙,谢谢!
请看看:
http://community.csdn.net/Expert/topic/3663/3663763.xml?temp=.569195
解决方案 »
- dataset 读取 30M xml文件的数据
- 关于socket分包传送!!!!!!!!!!!!!!!没人关注,换个标题
- 报表rdlc显示图片问题
- 如何结束BeginInvoke的异步调用?
- 为什么我调试我的VS程序的时候C盘的内存会减少。然后就报错
- 菜鸟提问:txtKeyWord.Attributes.Add("onkeydown",...是什么意思呀?
- 关于ACCESS如何取表名的问题
- 问一个简单的checkBox或comboBox绑定到dataSet的问题,高分易得哈
- 怎么在C#代码中控制GridView的排序
- c# HttpWebRequest模拟登录
- OracleCommandBuilder问题-Parameter 'p21': No size set for variable length data type: String
- ★请教关于C#的多线程间通信的问题。!!!
public event EventHandler ThreadEndA;
public event EventHandler ThreadEndB;
public void ThreadProcA()
{
//你的代码
if(ThreadEndA!=null)
ThreadEndA(this,EventArgs.Empty);
}
public void ThreadProcB()
{
//你的代码
if(ThreadEndB!=null)
ThreadEndB(this,EventArgs.Empty);
}
//你的主程序中
ThreadClass objThread=new ThreadClass();
objThread.ThreadEndA +=new EventHandler(this.第一线程结束的响应);
objThread.ThreadEndB +=new EventHandler(this.第二线程结束的响应);
Thread ta = new Thread(new ThreadStart(objThread.ThreadProcA));
Thread tb = new Thread(new ThreadStart(objThread.ThreadProcB));//启动ta、tb
public void XXXXX(object sender,EventArgs e)
{
//响应代码
}当然如果你要在线程结果的事件中传信息那就不要用这个委托,自己定一定参数类,定义个委托再由自定义委托定义事件
objThread.ThreadEndA +=new EventHandler(this.第一线程结束的响应);
objThread.ThreadEndB +=new EventHandler(this.第二线程结束的响应);
写出个简单的例子,好吗/谢谢
public void CallBackA(object sender,EventArgs e)
{
//响应代码
}
public void CallBackB(object sender,EventArgs e)
{
//响应代码
}objThread.ThreadEndA +=new EventHandler(this.第一线程结束的响应);
objThread.ThreadEndB +=new EventHandler(this.第二线程结束的响应);
改为
objThread.ThreadEndA +=new EventHandler(this.CallBackA);
objThread.ThreadEndB +=new EventHandler(this.CallBackB);可以吗
我 改完后提示这个,不知为什么?关键字 this 在静态属性、静态方法或静态字段初始值设定项中无效public void CallBackA(object sender,EventArgs e)
{
xxx="aa";
}
public void CallBackB(object sender,EventArgs e)
{
yyy="bb";
}
请再看一下。
改一下:
public static void CallBackA(object sender,EventArgs e)
{
xxx="aa";
}
public static void CallBackB(object sender,EventArgs e)
{
yyy="bb";
}objThread.ThreadEndA +=new EventHandler(CallBackA);
objThread.ThreadEndB +=new EventHandler(CallBackB);注意,xxx、yyy也要是静态的
可以吗
你在静态主方法中实例当前类,这样只要改
objThread.ThreadEndA +=new EventHandler(this.CallBackA);
objThread.ThreadEndB +=new EventHandler(this.CallBackB);
为
objThread.ThreadEndA +=new EventHandler(当前类的实例变量.CallBackA);
objThread.ThreadEndB +=new EventHandler(当前类的实例变量.CallBackB);
上帖的不用改也行
请问怎样改才能正确?using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Threading;namespace test
{
/// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox txtA;
protected System.Web.UI.WebControls.TextBox txtB;
protected System.Web.UI.WebControls.Button Button1;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion private void Button1_Click(object sender, System.EventArgs e)
{
ThreadClass objThread=new ThreadClass();
objThread.ThreadEndA +=new EventHandler(CallBackA);
objThread.ThreadEndB +=new EventHandler(CallBackB);
Thread ta = new Thread(new ThreadStart(objThread.ThreadProcA));
Thread tb = new Thread(new ThreadStart(objThread.ThreadProcB)); tb.Start();
ta.Start();
} public static void CallBackA(object sender,EventArgs e)
{
txtA.Text="a";
}
public static void CallBackB(object sender,EventArgs e)
{
txtB.Text="b";
} } public class ThreadClass
{
public event EventHandler ThreadEndA;
public event EventHandler ThreadEndB;
public void ThreadProcA()
{
//你的代码
if(ThreadEndA!=null)
ThreadEndA(this,EventArgs.Empty);
}
public void ThreadProcB()
{
//你的代码
if(ThreadEndB!=null)
ThreadEndB(this,EventArgs.Empty);
}
}
}
在
public static void CallBackA(object sender,EventArgs e)
{
txtA.Text="a";
}
public static void CallBackB(object sender,EventArgs e)
{
txtB.Text="b";
}处有错误
public static void CallBackA(object sender,EventArgs e)
{
txtA.Text="a";
}
public static void CallBackB(object sender,EventArgs e)
{
txtB.Text="b";
}
改为
public void CallBackA(object sender,EventArgs e)
{
txtA.Text="a";
}
public void CallBackB(object sender,EventArgs e)
{
txtB.Text="b";
}
解决方法是阻塞当前线程:
在
tb.Start();
ta.Start();
后加
Thread.Sleep(1000);OK
我是要抓取网页程序,用两个线程抓取两个不同的网页,我也不知道抓取网页时所用的时间,
所以sleep也是不一定的啊。要是刚好某一个网页出了问题,怎么办?
但你的线程是执行的啊
如果你抓了网页存放或做不显示的处理就不用Sleep
用Join
tb.Start();
ta.Start();
后加
ta.Join();
tb.Join();
tb.Start();
ta.Start();
if(!ta.Join(1000))
{
//不成功时的处理
}if(!tb.Jain(1000))
{
//不成功时的处理
}
tb.Start();
ta.Start();
后加
ta.Join();
tb.Join();
这样主线程就会等子线程执行完后执行!!
是winform比webform快的原因吗?
即
ta,tb在同时运行,Button1_Click等着