实现的功能:有“开始”和“停止”两个按钮,点“开始”,立即执行事件;点“停止”则立即停止。private void timer3_Tick(object sender, EventArgs e)
{
Thread threadMonitor = (new Thread(new ThreadStart(Monitor)));
threadMonitor.Start();
} public void Monitor()
{
string mystring = "hello!";
for (int i = 0; i < mystring.Length; i++)
{
MessageBox.Show(mystring[i].ToString());
}
} private void 开始_Click(object sender, EventArgs e) //点击可立即开始
{
timer3_Tick(null,null);
timer3.enabled=true;
} private void 结束_Click(object sender, EventArgs e) //本次事件完成后才结束
{
timer3.enabled=false;
}点“结束”按钮如何立即结束?求帮助,小弟这厢有礼了
{
Thread threadMonitor = (new Thread(new ThreadStart(Monitor)));
threadMonitor.Start();
} public void Monitor()
{
string mystring = "hello!";
for (int i = 0; i < mystring.Length; i++)
{
MessageBox.Show(mystring[i].ToString());
}
} private void 开始_Click(object sender, EventArgs e) //点击可立即开始
{
timer3_Tick(null,null);
timer3.enabled=true;
} private void 结束_Click(object sender, EventArgs e) //本次事件完成后才结束
{
timer3.enabled=false;
}点“结束”按钮如何立即结束?求帮助,小弟这厢有礼了
解决方案 »
- 问一个比较简的SQL语句问题,急!
- 本人再次求,柯达影像编辑 控件 是否能暂存于缓存的问题?C#
- 有关PictureBoxr的一个问题……
- c# 消息队列使用问题
- vs2008怎么找不到datagrid控件
- 求助,直接发送数据到打印机的问题!急!!!!
- 请教ASP.NET调用ORACLE函数的方法
- 谢谢版主别删……苦闷、困惑、救命!谁来来给小第指明一条道路……CVSNT2.0.41和WinCVS2.0配置了好几天都没有成功!看了好多好多的帖子,
- 关于TEXTBOX的数据绑定问题
- C# lock 多线程同步读写文件问题的疑问,希望知道的朋友能帮忙解答一下
- 怎么定位listbox中选中行的位置
- 有没有朋友做过股票软件吗
如果真的需要在线程里面触发一个事件让界面去弹出messagebox的话,建议用委托,invoke之类东东实现。
另外你的结束按钮不是仅仅要结束timer,还要结束很多个之前启动并且没有跑完的线程吧?
如果这样就需要用事件(CreateEvent)之类的东东去控制线程退出。
{
string mystring = "hello!";
for (int i = 0; i < mystring.Length; i++)
{
// 这里加一个等待event事件
if(WaitForSingleObject(m_hCloseEvent) == WAIT_TIMEOUT)
{
break;
}
MessageBox.Show(mystring[i].ToString());
}
}在主线程的开始按钮处理中创建Event m_hCloseEvent = CreateEvent(....);
线程函数带一个Event参数。
停止按钮处理设置Event SetEvent(m_hCloseEvent);
这样所有没有跑完的线程都会退出了。
if(WaitForSingleObject(m_hCloseEvent,0) != WAIT_TIMEOUT)
public partial class Form1 : Form
{
static public bool flag;
public Form1()
{
InitializeComponent();
}static public void Monitor()
{
string mystring = "hello!";
for (int i = 0; i < mystring.Length; i )
{
if (flag == false)
break;
else
{
MessageBox.Show(mystring[i].ToString());
}
}
}
private void button1_Click(object sender, EventArgs e)
{
timer1_Tick(null,null);
timer1.Enabled = true;
flag = true;
}private void button2_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
flag = false;
}private void timer1_Tick(object sender, EventArgs e)
{
Thread threadMonitor = (new Thread(new ThreadStart(Monitor)));
threadMonitor.Start();
}