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; using System.Collections; namespace ThreadTest { public partial class frmTest : Form { Thread threadAdd; Thread threadUpdate; delegate void TxtMsg(string msg); EventWaitHandle[] envents = new EventWaitHandle[2]; public frmTest() { InitializeComponent(); Thread t = Thread.CurrentThread; try { t.Abort(); } catch (ThreadAbortException e) { Thread.ResetAbort(); } OracleDataProvider db = new OracleDataProvider(); db.DeleteMsg(); } private void btnStart_Click(object sender, EventArgs e) { this.lblText.Text=NotepadOperate.ProcessStart(); } private void btnEnd_Click(object sender, EventArgs e) { this.lblText.Text = NotepadOperate.ProcessEnd(); } private void btnThread_Click(object sender, EventArgs e) { envents[0] = new EventWaitHandle(false,EventResetMode.AutoReset); envents[1] = new EventWaitHandle(false,EventResetMode.AutoReset); threadAdd = new Thread(AddMsg); threadUpdate = new Thread(UpdateMsg); PrintMsg("First thread start"); threadAdd.Start(); PrintMsg("Second thread start"); threadUpdate.Start(); } /// <summary> /// 插数据 /// </summary> public void AddMsg() { try { envents[0].Set();//将事件状态设置为终止状态,允许一个或多个等待线程继续 OracleDataProvider db = new OracleDataProvider(); db.DeleteMsg(); for (int i = 0; i < 10; i++) { envents[0].WaitOne();//阻止当前线程,直到update线程操作完毕 db.AddMsg(i); Thread.Sleep(100); PrintMsg("add thread " + i.ToString()); envents[1].Set(); } } catch (Exception e) { PrintMsg("add thread err"); Common_Log.WriteData.WriteLine("error on con ExecuteNoQuery" + e.ToString()); } } /// <summary> /// 修改数据 /// </summary> public void UpdateMsg() { int i = 0; try { //OracleDataProvider db = new OracleDataProvider(); //while (true) //{ // i++; // db.UpdateMsg(i); // Thread.Sleep(200); // PrintMsg("update thread "+i.ToString()); // if (i == 2) // { // break; // } //} OracleDataProvider db = new OracleDataProvider(); for ( i = 0; i <10; i++) { envents[1].WaitOne(); db.UpdateMsg(i); PrintMsg("update thread "+i.ToString()); envents[0].Set(); } } catch (Exception e) { PrintMsg("update thread err"); Common_Log.WriteData.WriteLine("error on con ExecuteNoQuery" + e.ToString()); } } /// <summary> /// 往TextBox中添加信息 /// </summary> /// <param name="msg"></param> public void AddMsg(string msg) { try { string newmsg = this.rtxtMsg.Text + "/n"; if (newmsg != null && newmsg.Length > 20000) newmsg = ""; newmsg = newmsg + DateTime.Now.ToString() + " " + msg; this.rtxtMsg.Text = newmsg; rtxtMsg.SelectionStart = rtxtMsg.Text.Length; rtxtMsg.Focus(); } catch (Exception e) { Common_Log.WriteData.WriteLine("error print msg to Form " + e.ToString()); } } private void PrintMsg(string msg) { try { if (this.rtxtMsg.InvokeRequired) { TxtMsg m = new TxtMsg(AddMsg); this.Invoke(m, new object[] { msg }); } else { AddMsg(msg); } Common_Log.WriteData.WriteLine(msg); } catch (Exception e) { Common_Log.WriteData.WriteLine("printMsg " + msg + e.Message); } } private void frmTest_FormClosed(object sender, FormClosedEventArgs e) { Thread t = Thread.CurrentThread; try { t.Abort(); } catch (ThreadAbortException te) { Thread.ResetAbort(); } } private void btnEndProcess_Click(object sender, EventArgs e) { Thread t = Thread.CurrentThread; try { //threadAdd.Abort(); //threadUpdate.Abort(); t.Abort(); } catch (ThreadAbortException ex) { Thread.ResetAbort(); } } } } using System; using System.Collections.Generic; using System.Text; namespace ThreadTest { public class OracleDataProvider : DataProviderBase { public OracleDataProvider() {} /// <summary> /// 修改数据 /// </summary> /// <param name="fid"></param> /// <returns></returns> public bool UpdateMsg(int i) { try { string strEdit = string.Format("update{0}",i); string strSql = string.Format("update TBL_REACHELTEST t set t.msg1 = '{1}' where id ={0}",i,strEdit); int num = ExecuteNoQuery(strSql); if (num > 0) return true; else return false; } catch (Exception e) { Common_Log.WriteData.WriteLine("error on updateStatus" + e.ToString()); return false; } } /// <summary> /// 修改数据 /// </summary> /// <param name="fid"></param> /// <returns></returns> public bool DeleteMsg() { try { string strSql = string.Format("delete from TBL_REACHELTEST t"); int num = ExecuteNoQuery(strSql); if (num > 0) return true; else return false; } catch (Exception e) { Common_Log.WriteData.WriteLine("error on updateStatus" + e.ToString()); return false; } } /// <summary> /// 添加数据 /// </summary> /// <param name="fid"></param> /// <returns></returns> public bool AddMsg(int i) { try { string msg1 = string.Format("test{0}",i); string strSql = string.Format("insert into TBL_REACHELTEST(id,msg,msg1) values({0},'{1}','{2}')",i,msg1,msg1); int num = ExecuteNoQuery(strSql); if (num > 0) return true; else return false; } catch (Exception e) { Common_Log.WriteData.WriteLine("error on updateStatus" + e.ToString()); return false; } } } }