WinForm委托修改界面,异步处理无响应。

3 篇文章 0 订阅

WinForm委托修改界面,异步处理无响应。


using System;
using System.Collections.Generic;
using System.Threading; 
using System.Windows.Forms;
using BJYS.Business;
using BJYS.Utilities;
using Platform; 
using SCBJ.Win.impl; 

namespace SCBJ.Win
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
            ResetUi();
            InitCbox();
        } 
        private bool _isRun = false;
        private delegate void GetOrdersDelegate(DateTime tpStart,DateTime tpEnd,int qid);
        private delegate void BaoJiaDelegate(MallYinOrder parm);
        /// <summary>
        /// 执行按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_todo_Click(object sender, EventArgs e)
        { 
            ResetUi();
            var tpStart = this.dateTP_start.Value;
            var tpEnd = this.dateTP_end.Value;
            var qid = ((Info)this.comboBox1.SelectedItem).Id;
            if (tpStart >= tpEnd)
            {
                MessageBox.Show("结束时间必须大于开始时间!");
                return;
            }
            this.btn_todo.Enabled = false;
            _isRun = true; 
            new GetOrdersDelegate(GetOrders).BeginInvoke(tpStart, tpEnd, qid, null, null);
        }
        /// <summary>
        /// 获取订单
        /// </summary>
        private void GetOrders(DateTime tpStart, DateTime tpEnd, int qid)
        { 
            var list = DomainControllerFactory.Create<OrderBll>().GetMallYinOrderSCBJ(null, tpStart, tpEnd, qid);
            var msg = string.Format("找到{0}条订单数据。", list.Count);
            Action<String> actionInvoke = delegate (string n) { blb_Msg.Text = n; };
            blb_Msg.Invoke(actionInvoke, new object[] { msg });
            Program.log.Debug(msg); 
            _pAll = list.Count;
            foreach (var itemObj in list)
            {
                if (_isRun)
                {
                    new BaoJiaDelegate(BaoJia).BeginInvoke(itemObj, BaoJiaComplete, null); 
                }
                else break; 
                Thread.Sleep(200);
            }
            if (_pAll==0) ResetUi(); 
        }

        /// <summary>
        /// 测试报价
        /// </summary> 
        /// <param name="itemObj"></param>
        private void BaoJia(MallYinOrder itemObj)
        {
            if (itemObj.baojialog == null)
            {
                Program.log.Debug(string.Format("订单号{0}没有找到baojialog", itemObj.Id));
            }
            else if (!itemObj.baojialog.hjg.Contains("烫金") && !itemObj.baojialog.hjg.Contains("烫银"))
            {
                string baojiaStr = string.Empty;
                if (itemObj.baojialog.qid == 21 && IsStandard(itemObj.baojialog.xx, itemObj.baojialog.yy))
                    baojiaStr = PinBusinessCard.GetStr(itemObj.baojialog);
                else if (itemObj.baojialog.qid == 22)
                    baojiaStr = PinDanZhang.GetStr(itemObj.baojialog);
                if (!baojiaStr.IsNullOrEmpty())
                {
                    BaoJiaServiceClient client = new BaoJiaServiceClient();
                    tempuri.org.ParamsObj pObj = new tempuri.org.ParamsObj();
                    pObj.QID = itemObj.baojialog.qid.ToString();
                    pObj.UID = itemObj.baojialog.uid.ToString();
                    pObj.Data = baojiaStr;
                    pObj = client.BaoJia(pObj);
                    var xmlResult = pObj.ProcessedResult;
                    var xmlTb = XMLHelper.XMLToDataTable(xmlResult);
                    var logidStr = xmlTb.Rows[0]["logid"].ToString();
                    Program.log.Debug(string.Format("**用户:{3},订单号:{0},logid:{4},参数字符串:{1},报价结果:{2}",
                        itemObj.Id, baojiaStr, xmlResult, pObj.UID, logidStr)); 
                    var logid = 0;
                    int.TryParse(logidStr, out logid);
                    //if (logid > 0)
                    //{
                    //    var bjlEntity = DomainControllerFactory.Create<baojialogBll>().Getbaojialog(logid);
                    //    var yoEntity = RF.Concrete<MallYinOrderRepository>().GetById(itemObj.Id);
                    //    if (yoEntity != null)
                    //    {
                    //        yoEntity.cbprice = bjlEntity.cbprice;
                    //        //RF.Save(yoEntity);
                    //        Program.log.Debug(string.Format("订单号:{0},修改成本价为:{1}", itemObj.Id, yoEntity.cbprice));
                    //    }
                    //    else
                    //    {
                    //        Program.log.Debug(string.Format("订单号:{0},找不到订单", itemObj.Id));
                    //    }
                    //}
                }
                else
                {
                    Program.log.Debug(string.Format("订单号{0}生成的参数字符串为空", itemObj.Id));
                }
            }
        }

        #region 进度条
        private int _pIndex = 1;
        private double _pCo = 0;
        private double _ppp = 0;
        private int _pAll = 17;
        /// <summary>
        /// 报价完成回调
        /// </summary>
        /// <param name="ir"></param>
        private void BaoJiaComplete(IAsyncResult ir)
        {
            Action<String> actionInvoke = delegate(string n)
            {
                if (_pIndex == _pAll)
                {
                    this.lbl_Progress_Text.Text = "完成";
                    this.panel_Progress_bg.Width = 600;
                    this.panel_Progress.Width = 600;
                    this.btn_todo.Enabled = true; //还原按钮启用 
                }
                else
                {
                    double p = 600d / _pAll;
                    _pCo += p;
                    _pIndex++;
                    this.lbl_Progress_Text.Text = Math.Round((_pCo / 600d * 100d), 2) + "%";
                    this.panel_Progress_bg.Width = 600;
                    _ppp += (600d/_pAll);
                    this.panel_Progress.Width = Convert.ToInt32(Math.Round(_ppp));
                }
            };
            panel_Progress.Invoke(actionInvoke, new object[] { "" });
        }
        /// <summary>
        /// 界面复位
        /// </summary>
        private void ResetUi()
        {
            this.panel_Progress_bg.Width = 0;
            this.panel_Progress.Width = 0;
            this.lbl_Progress_Text.Text = "";
            this.btn_todo.Enabled = true;
        }
        #endregion
        /// <summary>
        /// 停止
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_Stop_Click(object sender, EventArgs e)
        {
            _isRun = false;
            this.btn_todo.Enabled = true;
        }
        
        private void InitCbox()
        {
            IList<Info> infoList = new List<Info>();
            Info info1 = new Info() { Id = 21, Name = "拼版名片" };
            Info info2 = new Info() { Id = 22, Name = "拼版单张" }; 
            infoList.Add(info1);
            infoList.Add(info2); 
            comboBox1.DataSource = infoList;
            comboBox1.ValueMember = "Id";
            comboBox1.DisplayMember = "Name";
        }
        /// <summary>
        /// 是否标准尺寸
        /// </summary>
        /// <param name="xx"></param>
        /// <param name="yy"></param>
        /// <returns></returns>
        private bool IsStandard(int? xx, int? yy)
        {
            bool falg = false;
            if (xx == 90 && yy == 50)
            {
                falg = true;
            }
            else if (xx == 90 && yy == 54)
            {
                falg = true;
            }
            else if (xx == 90 && yy == 95)
            {
                falg = true;
            }
            else if (xx == 90 && yy == 108)
            {
                falg = true;
            }
            else if (xx == 180 && yy == 54)
            {
                falg = true;
            }
            return falg;
        }
    }
    public class Info
    {
        public int Id { get; set; }
        public string Name { get; set; } 
    }
}





Action<string,string> actionInvoke = delegate (string message,string message2) { blb_Msg.Text = message; };
            blb_Msg.Invoke(actionInvoke, msg, msg);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值