using System; using System.Collections.Generic; using System.ComponentModel; using System.Configuration; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Windows.Forms; namespace MpseparateOrder { public partial class MainForm : Form { static string strServer = ConfigurationManager.AppSettings["Server"].ToString(); static string strPort = ConfigurationManager.AppSettings["Port"].ToString(); static string strName = ConfigurationManager.AppSettings["Name"].ToString(); static string strUserName = ConfigurationManager.AppSettings["UserName"].ToString(); static string strUserPwd = ConfigurationManager.AppSettings["UserPwd"].ToString(); static AppCode.OracleHelper _OracleHelper = new AppCode.OracleHelper(strServer, strPort, strName, strUserName, strUserPwd); static string[] strPROVINCE_CODES = ConfigurationManager.AppSettings["PROVINCE_CODES"].ToString().Split(',');//配置省份 static int n_Hour = Convert.ToInt32( ConfigurationManager.AppSettings["Hour"].ToString());//定义生成 private bool b_False = false; Thread thread = null; public MainForm() { InitializeComponent(); } private void MainForm_Load(object sender, EventArgs e) { this.dtpStarTime.Text = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"); } private void BtnStar_Click(object sender, EventArgs e) { b_False = b_False ? false : true; BtnStar.Text = b_False ? "停止" : "开始"; if (lvMessage.Items.Count > 5000) { lvMessage.Items.Clear(); } if (b_False) { try { ParameterizedThreadStart threadStart = new ParameterizedThreadStart(StarDate); thread = new Thread(threadStart); thread.Start(); } catch (Exception) { } } else { if (thread != null) { try { thread.Abort(); } catch (Exception) { } } } } private void StarDate(object obj) { while (true) { this.Invoke(new Action(() => { this.dtpStarTime.Text = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"); this.lbMessage.Text = ""; })); if (DateTime.Now.Hour == 1 && !b_False) { b_False = true; } if (DateTime.Now.Hour == n_Hour && b_False) { BeginMPSEPARATE(obj); b_False = false; } Thread.Sleep(60000); } } #region 方法 -> 生成数据 private void BeginMPSEPARATE(object obj) { string strTime = this.dtpStarTime.Value.ToString("yyyy-MM-dd");// Convert.ToDateTime(this.dtpStarTime.Text).AddDays(i).ToString("yyyy-MM-dd"); try { this.Invoke(new Action(() => { this.lbMessage.Text = ""; })); //for (int i = 0; i < 10; i++) //{ if (lvMessage.Items.Count > 5000) { lvMessage.Items.Clear(); } string table_Name = "T_MPSEPARATE_ORDER" + "_" + Convert.ToDateTime(strTime).ToString("yyyyMM"); string up_table_Name= "T_MPSEPARATE_ORDER" + "_" + Convert.ToDateTime(strTime).AddMonths(-1).ToString("yyyyMM"); string seq_id = "SEQ_MPSEPARATE_ORDER"+ "_" + Convert.ToDateTime(strTime).ToString("yyyyMM"); #region 判断表和自增是否存在 DataTable _dt_Table = _OracleHelper.ExcuteSqlGetDataSet("select count(1) as num from all_tables where TABLE_NAME = upper('" + table_Name + "')").Tables[0]; if (_dt_Table != null && _dt_Table.Rows.Count > 0 && _dt_Table.Rows[0][0].ToString()=="0") { string sql_table = string.Format(@"CREATE TABLE HIGHWAY_EXCHANGE.{0} ( MPSEPARATE_ORDER_ID NUMBER(9,0) NOT NULL, MERCHANT_CODE VARCHAR2(100), TICKET_CODE VARCHAR2(100), FFTICKET_CODE VARCHAR2(100), CENTERTICKET_CODE VARCHAR2(100), ORITICKET_CODE VARCHAR2(100), TRANSACTION_TRENCH VARCHAR2(50), TRANSACTION_TYPE VARCHAR2(50), TICKET_AMOUNT NUMBER(16,6) DEFAULT 0, CURRENCY VARCHAR2(50), DEDUCTION_RATE NUMBER(16,6) DEFAULT 0, TAXFEE_AMOUNT NUMBER(16,6) DEFAULT 0, SHARE_PROFIT NUMBER(16,6) DEFAULT 0, TRADE_DATE DATE, SERVERPART_CODE VARCHAR2(100), SERVERPARTSHOP_CODE VARCHAR2(100), MACHINECODE VARCHAR2(100), CREATETIME DATE ) PCTFREE 10 MAXTRANS 255 TABLESPACE HIGHWAY_EXCHANGE STORAGE(INITIAL 10K MINEXTENTS 1 MAXEXTENTS 2147483645 BUFFER_POOL DEFAULT) NOCACHE LOGGING", table_Name); _OracleHelper.ExcuteSql(sql_table); sql_table = string.Format(@"CREATE SEQUENCE HIGHWAY_EXCHANGE.{0} INCREMENT BY 1 START WITH 1 NOMAXVALUE NOMINVALUE NOCYCLE CACHE 2 NOORDER ", seq_id); _OracleHelper.ExcuteSql(sql_table); } #endregion this.Invoke(new Action(() => { lvMessage.Items.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "开始生成" + strTime + "号数据"); })); this.Invoke(new Action(() => { lvMessage.Items.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "正在删除" + strTime + "号数据"); })); _OracleHelper.ExcuteSql(string.Format(@"DELETE FROM HIGHWAY_EXCHANGE.{1} A WHERE A.TRADE_DATE >= TO_DATE('{0}','YYYY-MM-DD hh24:mi:ss') and A.TRADE_DATE < TO_DATE('{0}', 'YYYY-MM-DD hh24:mi:ss') + 1", Convert.ToDateTime(strTime), table_Name)); this.Invoke(new Action(() => { lvMessage.Items.Add("删除" + strTime + "号数据成功"); })); #region 正常按服务区、门店编码、机器码生成的订单号规则数据 string sql = string.Format(@" INSERT INTO HIGHWAY_EXCHANGE.{1}(MPSEPARATE_ORDER_ID, MERCHANT_CODE,TICKET_CODE,FFTICKET_CODE,CENTERTICKET_CODE,ORITICKET_CODE, TRANSACTION_TRENCH,TRANSACTION_TYPE,TICKET_AMOUNT,CURRENCY, DEDUCTION_RATE,TAXFEE_AMOUNT,SHARE_PROFIT,TRADE_DATE, SERVERPART_CODE,SERVERPARTSHOP_CODE,MACHINECODE,CREATETIME) SELECT HIGHWAY_EXCHANGE.{2}.NEXTVAL,MERCHANT_CODE, TICKET_CODE,FFTICKET_CODE,CENTERTICKET_CODE, ORITICKET_CODE,TRANSACTION_TRENCH,TRANSACTION_TYPE, TICKET_AMOUNT,CURRENCY,DEDUCTION_RATE,TAXFEE_AMOUNT,SHARE_PROFIT,TRADE_DATE, SERVERPART_CODE,SERVERPARTSHOP_CODE,MACHINECODE,SYSDATE FROM ( SELECT MERCHANT_CODE, TICKET_CODE,FFTICKET_CODE,CENTERTICKET_CODE, ORITICKET_CODE,TRANSACTION_TRENCH,TRANSACTION_TYPE, NVL(TICKET_AMOUNT,0) AS TICKET_AMOUNT,CURRENCY,NVL(DEDUCTION_RATE,0)AS DEDUCTION_RATE ,NVL(TAXFEE_AMOUNT,0)AS TAXFEE_AMOUNT,NVL(SHARE_PROFIT,0)AS SHARE_PROFIT,TRADE_DATE ,SUBSTR(A.TICKET_CODE,0,6) AS SERVERPART_CODE, ( CASE WHEN LENGTH(A.TICKET_CODE) =28 THEN SUBSTR(A.TICKET_CODE,7,4) WHEN LENGTH(A.TICKET_CODE)=30 THEN SUBSTR(A.TICKET_CODE,7,6) END ) AS SERVERPARTSHOP_CODE , ( CASE WHEN LENGTH(A.TICKET_CODE) =28 THEN SUBSTR(A.TICKET_CODE,11,4) WHEN LENGTH(A.TICKET_CODE)=30 THEN SUBSTR(A.TICKET_CODE,13,4) END ) AS MACHINECODE FROM HIGHWAY_EXCHANGE.T_MPSEPARATE A WHERE A.TICKET_TYPE = 0 AND A.TRADE_DATE >= TO_DATE('{0}','YYYY-MM-DD hh24:mi:ss') and A.TRADE_DATE < TO_DATE('{0}','YYYY-MM-DD hh24:mi:ss')+1 GROUP BY MERCHANT_CODE,TICKET_CODE,FFTICKET_CODE, CENTERTICKET_CODE,ORITICKET_CODE,TRANSACTION_TRENCH,TRANSACTION_TYPE, TICKET_AMOUNT,CURRENCY,DEDUCTION_RATE, TAXFEE_AMOUNT,SHARE_PROFIT,TRADE_DATE)T", Convert.ToDateTime(strTime), table_Name,seq_id); _OracleHelper.ExcuteSql(sql); this.Invoke(new Action(() => { lvMessage.Items.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "生成正常规则订单号" + strTime + "号数据成功"); })); #endregion #region 非正常订单号规则数据 sql = string.Format(@" INSERT INTO HIGHWAY_EXCHANGE.{1}(MPSEPARATE_ORDER_ID, MERCHANT_CODE,TICKET_CODE,FFTICKET_CODE,CENTERTICKET_CODE,ORITICKET_CODE, TRANSACTION_TRENCH,TRANSACTION_TYPE,TICKET_AMOUNT,CURRENCY, DEDUCTION_RATE,TAXFEE_AMOUNT,SHARE_PROFIT,TRADE_DATE, SERVERPART_CODE,SERVERPARTSHOP_CODE,MACHINECODE,CREATETIME) SELECT HIGHWAY_EXCHANGE.{2}.NEXTVAL,MERCHANT_CODE,TICKET_CODE,FFTICKET_CODE, CENTERTICKET_CODE,ORITICKET_CODE,TRANSACTION_TRENCH,TRANSACTION_TYPE, TICKET_AMOUNT,CURRENCY,DEDUCTION_RATE, TAXFEE_AMOUNT,SHARE_PROFIT,TRADE_DATE,SERVERPARTCODE,SHOPCODE,MACHINECODE, SYSDATE FROM ( SELECT MERCHANT_CODE,TICKET_CODE,FFTICKET_CODE, CENTERTICKET_CODE,ORITICKET_CODE,TRANSACTION_TRENCH,TRANSACTION_TYPE, TICKET_AMOUNT,CURRENCY,DEDUCTION_RATE, TAXFEE_AMOUNT,SHARE_PROFIT,TRADE_DATE,SERVERPARTCODE,SHOPCODE,MACHINECODE FROM ( SELECT A.MERCHANT_CODE, A.TICKET_CODE,A.FFTICKET_CODE,A.CENTERTICKET_CODE, A.ORITICKET_CODE,A.TRANSACTION_TRENCH,A.TRANSACTION_TYPE, NVL(A.TICKET_AMOUNT,0) AS TICKET_AMOUNT,A.CURRENCY,NVL(A.DEDUCTION_RATE,0)AS DEDUCTION_RATE ,NVL(A.TAXFEE_AMOUNT,0)AS TAXFEE_AMOUNT,NVL(A.SHARE_PROFIT,0)AS SHARE_PROFIT,A.TRADE_DATE , NVL(B.SERVERPARTCODE,'331010') AS SERVERPARTCODE,NVL(B.SHOPCODE,011006) AS SHOPCODE, NVL(B.MACHINECODE,'9994') AS MACHINECODE FROM HIGHWAY_EXCHANGE.T_MPSEPARATE A LEFT JOIN HIGHWAY_SELLDATA.T_SELLDATA_EXTRA B ON A.TICKET_CODE = B.TICKETCODE WHERE A.TICKET_TYPE = 1 AND A.TRADE_DATE >= TO_DATE('{0}','YYYY-MM-DD hh24:mi:ss') and A.TRADE_DATE < TO_DATE('{0}','YYYY-MM-DD hh24:mi:ss')+1 ) T GROUP BY MERCHANT_CODE,TICKET_CODE,FFTICKET_CODE, CENTERTICKET_CODE,ORITICKET_CODE,TRANSACTION_TRENCH,TRANSACTION_TYPE, TICKET_AMOUNT,CURRENCY,DEDUCTION_RATE, TAXFEE_AMOUNT,SHARE_PROFIT,TRADE_DATE,SERVERPARTCODE,SHOPCODE,MACHINECODE ) R", Convert.ToDateTime(strTime), table_Name, seq_id); _OracleHelper.ExcuteSql(sql); this.Invoke(new Action(() => { lvMessage.Items.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "生成非正常规则订单号" + strTime + "号数据成功"); })); #endregion #region T_MPSEPARATE 只保留最近半个月数据其他都移动历史表中 sql = string.Format(@"INSERT INTO HIGHWAY_EXCHANGE.T_MPSEPARATE_HIS( MPSEPARATE_ID,MERCHANT_CODE,TICKET_CODE,FFTICKET_CODE,CENTERTICKET_CODE, ORITICKET_CODE,TRANSACTION_TRENCH,TRANSACTION_TYPE,TICKET_AMOUNT,CURRENCY,DEDUCTION_RATE, TAXFEE_AMOUNT,SHARE_PROFIT,TRADE_DATE,DOWNLOAD_DATE,TRANSFER_STATE,MPSEPARATE_DESC ) SELECT MPSEPARATE_ID, MERCHANT_CODE, TICKET_CODE, FFTICKET_CODE, CENTERTICKET_CODE, ORITICKET_CODE, TRANSACTION_TRENCH, TRANSACTION_TYPE, TICKET_AMOUNT, CURRENCY, DEDUCTION_RATE, TAXFEE_AMOUNT, SHARE_PROFIT, TRADE_DATE, DOWNLOAD_DATE, TRANSFER_STATE, MPSEPARATE_DESC from HIGHWAY_EXCHANGE.T_MPSEPARATE A WHERE A.TRADE_DATE < TO_DATE('{0}','YYYY-MM-DD hh24:mi:ss')",DateTime.Now.AddDays(-15).ToString("yyyy-MM-dd HH:mm:ss")); _OracleHelper.ExcuteSql(sql); sql = string.Format("DELETE FROM HIGHWAY_EXCHANGE.T_MPSEPARATE A WHERE A.TRADE_DATE < TO_DATE('{0}','YYYY-MM-DD hh24:mi:ss')", DateTime.Now.AddDays(-15).ToString("yyyy-MM-dd HH:mm:ss")); _OracleHelper.ExcuteSql(sql); #endregion #region 生成营收账单数据 foreach (var PROVINCE_CODE in strPROVINCE_CODES) { string strUrl = GetUrl(PROVINCE_CODE); if (!string.IsNullOrEmpty(strUrl)) { string strFrom = string.Format("action_type=GetAcountDetail&statDay={0},{0}&serverPartId=&shopIds=&StatisticsType=", Convert.ToDateTime(strTime).ToString("yyyy-MM-dd")); AppCode.EndAcountResult endAcountResult = Newtonsoft.Json.JsonConvert.DeserializeObject(AppCode.Common.HttpUrlPost(strFrom, strUrl)); if (endAcountResult != null) { this.Invoke(new Action(() => { lvMessage.Items.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "获取接口" + strTime + "号数据成功"); })); List _list = new List(); _OracleHelper.ExcuteSql(string.Format(@"DELETE FROM HIGHWAY_EXCHANGE.T_ENDACOUNTDATA A WHERE A.ENDACCOUNT_DATE >= TO_DATE('{0}','YYYY-MM-DD hh24:mi:ss') and A.ENDACCOUNT_DATE < TO_DATE('{0}', 'YYYY-MM-DD hh24:mi:ss') + 1 AND A.PROVINCE_CODE = '{1}'", Convert.ToDateTime(strTime), PROVINCE_CODE)); string _SQL = string.Format(@"SELECT TRANSACTION_TYPE,TICKET_AMOUNT,TAXFEE_AMOUNT,TRADE_DATE,SERVERPART_CODE,SERVERPARTSHOP_CODE,MACHINECODE FROM HIGHWAY_EXCHANGE.{2} A WHERE A.TRADE_DATE >=TO_DATE('{0}','YYYY-MM-DD hh24:mi:ss') AND A.TRADE_DATE < TO_DATE('{1}','YYYY-MM-DD hh24:mi:ss')+1 ", Convert.ToDateTime(strTime).AddDays(-1), strTime, table_Name); if (Convert.ToDateTime(strTime).Day == 1)//生成每月1号数据时需要用到上个月单品数据 { _SQL = string.Format(@"SELECT TRANSACTION_TYPE,TICKET_AMOUNT,TAXFEE_AMOUNT,TRADE_DATE,SERVERPART_CODE,SERVERPARTSHOP_CODE,MACHINECODE FROM HIGHWAY_EXCHANGE.{2} A WHERE A.TRADE_DATE >=TO_DATE('{0}','YYYY-MM-DD hh24:mi:ss') AND A.TRADE_DATE < TO_DATE('{1}','YYYY-MM-DD hh24:mi:ss')+1 UNION ALL SELECT TRANSACTION_TYPE,TICKET_AMOUNT,TAXFEE_AMOUNT,TRADE_DATE,SERVERPART_CODE,SERVERPARTSHOP_CODE,MACHINECODE FROM HIGHWAY_EXCHANGE.{3} A WHERE A.TRADE_DATE >=TO_DATE('{0}','YYYY-MM-DD hh24:mi:ss') AND A.TRADE_DATE < TO_DATE('{1}','YYYY-MM-DD hh24:mi:ss')+1 ", Convert.ToDateTime(strTime).AddDays(-1), strTime, table_Name, up_table_Name); } DataTable _dt = _OracleHelper.ExcuteSqlGetDataSet(_SQL).Tables[0]; this.Invoke(new Action(() => { this.lbMessage.Text = string.Format("省份编码:" + PROVINCE_CODE + ",接口数据总条数:{0},剩余条条数:{1}", endAcountResult.list.Count, endAcountResult.list.Count); })); int num = 0; foreach (AppCode.EndAcountData _EndAcountData in endAcountResult.list) { if (!string.IsNullOrEmpty(_EndAcountData.MACHINECODE)) { DataRow[] _DataRow = _dt.Select(" TRADE_DATE>='" + _EndAcountData.ENDACCOUNT_STARTDATE + "' and TRADE_DATE<='" + _EndAcountData.ENDACCOUNT_DATE + "' and SERVERPART_CODE='" + _EndAcountData.SERVERPARTCODE + "' and SERVERPARTSHOP_CODE ='" + _EndAcountData.SHOPCODE + "' and MACHINECODE ='" + _EndAcountData.MACHINECODE.PadLeft(4, '0') + "'"); decimal _TICKET_AMOUNT = 0, _TAXFEE_AMOUNT = 0; for (int i = 0; i < _DataRow.Length; i++) { if (_DataRow[i]["TRANSACTION_TYPE"] != null && _DataRow[i]["TRANSACTION_TYPE"].ToString() == "1000") { _TICKET_AMOUNT += Convert.ToDecimal(_DataRow[i]["TICKET_AMOUNT"]); } else { _TICKET_AMOUNT -= Convert.ToDecimal(_DataRow[i]["TICKET_AMOUNT"]); } if (_DataRow[i]["TRANSACTION_TYPE"] != null && _DataRow[i]["TRANSACTION_TYPE"].ToString() == "1000") { _TAXFEE_AMOUNT += Convert.ToDecimal(_DataRow[i]["TAXFEE_AMOUNT"]); } else { _TAXFEE_AMOUNT -= Convert.ToDecimal(_DataRow[i]["TAXFEE_AMOUNT"]); } } _EndAcountData.TICKET_AMOUNT = _TICKET_AMOUNT; _EndAcountData.TAXFEE_AMOUNT = _TAXFEE_AMOUNT; } else { _EndAcountData.TICKET_AMOUNT = 0; _EndAcountData.TAXFEE_AMOUNT = 0; } _SQL = String.Format(@"INSERT INTO HIGHWAY_EXCHANGE.T_ENDACOUNTDATA( ENDACOUNTDATA_ID,SERVERPART_ID,SERVERPARTSHOP_ID,SERVERPART_CODE,SERVERPARTSHOP_CODE, SERVERPART_NAME,SHOPNAME,SHOPSHORTNAME,SHOPREGION,MACHINECODE,CASHIER_NAME, ENDACCOUNT_STARTDATE,ENDACCOUNT_DATE, TICKETCOUNT,TOTALCOUNT,TOTALSELLAMOUNT,TOTALOFFAMOUNT, CASHPAY_DOWNLORD,MOBILEPAYMENT,COSTBILL,CASHPAY,TICKET_AMOUNT,TAXFEE_AMOUNT,PROVINCE_CODE,CREATETIME) VALUES(HIGHWAY_EXCHANGE.SEQ_ENDACOUNTDATA.NEXTVAL,'{0}','{1}','{2}','{3}' ,'{4}','{5}','{6}','{7}','{8}','{9}' ,to_date('{10}','YYYY-MM-DD hh24:mi:ss'),to_date('{11}','YYYY-MM-DD hh24:mi:ss'),'{12}' ,'{13}','{14}','{15}','{16}' ,'{17}','{18}','{19}','{20}','{21}','{22}',to_date('{23}','YYYY-MM-DD hh24:mi:ss'))", _EndAcountData.SERVERPART_ID, _EndAcountData.SERVERPARTSHOP_ID, _EndAcountData.SERVERPARTCODE, _EndAcountData.SHOPCODE, _EndAcountData.SERVERPART_NAME, _EndAcountData.SHOPNAME, _EndAcountData.SHOPSHORTNAME, _EndAcountData.SHOPREGION, _EndAcountData.MACHINECODE, _EndAcountData.CASHIER_NAME, _EndAcountData.ENDACCOUNT_STARTDATE, _EndAcountData.ENDACCOUNT_DATE, _EndAcountData.TICKETCOUNT, _EndAcountData.TOTALCOUNT, _EndAcountData.TOTALSELLAMOUNT, _EndAcountData.TOTALOFFAMOUNT, _EndAcountData.CASHPAY_DOWNLORD, _EndAcountData.MOBILEPAYMENT, _EndAcountData.COSTBILL, _EndAcountData.CASHPAY, _EndAcountData.TICKET_AMOUNT, _EndAcountData.TAXFEE_AMOUNT, PROVINCE_CODE,DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); _list.Add(_SQL); num++; this.Invoke(new Action(() => { this.lbMessage.Text = string.Format("省份编码:" + PROVINCE_CODE + ",接口数据总条数:{0},剩余条条数:{1}", endAcountResult.list.Count, endAcountResult.list.Count - num); })); } if (_list.Count > 0) { _OracleHelper.ExecuteSqlTran(_list.ToArray()); } this.Invoke(new Action(() => { lvMessage.Items.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "插入营收日结" + strTime + "号数据成功"); })); } else { this.Invoke(new Action(() => { lvMessage.Items.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "获取接口" + strTime + "号数据失败"); })); } } else { this.Invoke(new Action(() => { lvMessage.Items.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "[" + PROVINCE_CODE + "]获取配置文件接口地址失败"); })); } } #endregion this.Invoke(new Action(() => { lvMessage.Items.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "生成" + strTime + "号数据完成结束"); })); //} } catch (Exception ex) { this.Invoke(new Action(() => { lvMessage.Items.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "生成" + strTime + "号数据报错,报错信息:"+ex.Message); })); } } #endregion #region 方法 -> 根据服务区取数据URL /// /// 根据服务区取数据URL /// /// /// public static string GetUrl(string serverpartid) { try { string strUrl = string.Empty; return System.Configuration.ConfigurationManager.AppSettings[serverpartid]; } catch (Exception) { return ""; } } #endregion private void button1_Click(object sender, EventArgs e) { ParameterizedThreadStart threadStart = new ParameterizedThreadStart(BeginMPSEPARATE); Thread threadSD = new Thread(threadStart); threadSD.Start(); } } }