你想在线程里更新UI,需要使用委托.搜一搜:委托操作UI
如果你是在forms.timer里更新,是没有问题的.
但是如果你在system.timers.timer里更新,这是个线程,必须使用委托

解决方案 »

  1.   

            private void auto_print()
            {
                checkNewOrder_printcon_auto = new MySqlConnection(strConn);
                DataTable dtCheckNewOrderTb = new DataTable();
                DataTable getserviceTimetb = new DataTable();
                DateTime dtNow = DateTime.Now;
                DateTime dtTime10 = dtNow.AddSeconds(10f);
                string checkOrderSql = "";
                //int timenow = 0;            try
                {
                    dtNow = getNow_auto();
                    MessageBox.Show("新订单自动打印功能已开启!");
                    DateTime dtpast = dtNow;
                    for (int i = 0; i < 1; i = 0)
                    {
                        if (checkNewOrder_printcon_auto.State != ConnectionState.Open)
                        {
                            checkNewOrder_printcon_auto.Open();
                        }
                        if (dtpast == dtNow)
                           //checkOrderSql = "select y.order_id from shop_order y where from_unixtime(y.ceart_time) <='" + dtNow + "' and from_unixtime(y.ceart_time)>date_add('" + dtNow + "',interval '-10' second)  and y.order_state!='0' and y.order_state!='10' and y.order_state!='50' and liushuixian='" + liushuixian.Text.ToString() + "'";
                            checkOrderSql = "select y.order_id from shop_order y where from_unixtime(y.ceart_time) <='" + dtNow + "' and from_unixtime(y.ceart_time)>date_add('" + dtNow + "',interval '-10' second)  and y.order_state='20' and y.is_print=0 and liushuixian='" + liushuixian.Text.ToString() + "'";
                        else
                            //checkOrderSql = "select y.order_id from shop_order y where from_unixtime(y.ceart_time) <='" + dtNow + "' and from_unixtime(y.ceart_time)>'" + dtpast + "' and y.order_state!='0' and y.order_state!='10' and y.order_state!='50'  and liushuixian='" + liushuixian.Text.ToString() + "'";
                            checkOrderSql = "select y.order_id from shop_order y where from_unixtime(y.ceart_time) <='" + dtNow + "' and from_unixtime(y.ceart_time)>'" + dtpast + "' and y.order_state='20' and y.is_print=0 and liushuixian='" + liushuixian.Text.ToString() + "'";                    MySqlDataAdapter mda = new MySqlDataAdapter(checkOrderSql, checkNewOrder_printcon_auto);
                        mda.Fill(dtCheckNewOrderTb);                    if (dtCheckNewOrderTb.Rows.Count > 0)
                        {
                            for (int j = 0; j < dtCheckNewOrderTb.Rows.Count; j++)
                            {
                                orderId_auto = dtCheckNewOrderTb.Rows[j]["order_id"].ToString();
                                //this.printorder_auto();
                                //updateIsPrintStatus(orderId_auto);//更新数据库is_print为1(1为已打印)
                            }
                            dtCheckNewOrderTb.Rows.Clear();
                        }
                        
                        //callButtonEvent(dataShow, "OnClick");
                        checkNewOrder_printcon_auto.Close();
                        Thread.Sleep(10000);
                        dataShow_auto();
                        //timenow = int.Parse(((getNow_auto().Ticks - dtNow.Ticks) / 10000000).ToString());
                        dtpast = dtNow.AddMinutes(-30);
                        dtNow = getNow_auto();
                    }            }