当前位置: 代码迷 >> C# >> C#消息处理 展示label值
  详细解决方案

C#消息处理 展示label值

热度:102   发布时间:2016-05-05 03:33:02.0
C#消息处理 显示label值
WINFORM 主界面打开后会自动启用定时器timer1,每个1分钟获取一次订单
但是每次显示单据获取中或已获取XX条时界面会卡,我已经开了一个线程还是不行
代码是这样的
 private void GetOrdersText()
        {
            if (!IsReset)
            {
                tsslblOrdersStatus.Text = "单据获取中...";
                Application.DoEvents();
                tmrChangeOrderStatus.Enabled = false;
                int orderNum = 0;
                Queue<string> queue = new Queue<string>();
                InsertOrdersJsonData(out orderNum, out queue);
                if (orderNum == 0)
                {
                    tsslblOrdersStatus.Text = "已获取0条";
                    Application.DoEvents();
                    Thread.Sleep(50);
                }
                else
                {
                    int number = 0;
                    foreach (string item in queue)
                    {
                        PrintOrders(item, out number);
                    }
                    queue.Clear();
                    for (int i = 1; i <= orderNum; i++)
                    {
                        tsslblOrdersStatus.Text = "已获取" + i.ToString() + "条";
                        Application.DoEvents();
                        Thread.Sleep(50);
                    }
                }
                IsReset = true;
                tmrChangeOrderStatus.Enabled = true;
                k = int.Parse(bus.GetAttrValueByUserName("数据获取频率", Business.userName));
                if (orderNum != 0)
                {
                    foreach (Control p in pnlMain.Controls)
                    {
                        if (p is FrmPrinting)
                        {
                            FrmPrinting frmPrint = new FrmPrinting();
                            ChangePanel(frmPrint);
                            break;
                        }
                    }
                }
            }
            else
            {
                if (tmrChangeOrderStatus.Enabled)
                {
                    tsslblOrdersStatus.Text = (k - 1).ToString() + "秒后获取订单";
                    k--;
                    if (k == 1)
                    {
                        k = int.Parse(bus.GetAttrValueByUserName("数据获取频率", Business.userName));
                        IsReset = false;
                    }
                }
            }
        }
------解决思路----------------------
你的线程在哪里呢?没看到相关代码
------解决思路----------------------
另外要注意,也没有任何理由直接说“多线程处理”就能让程序执行加快。适合多线程处理的程序,是因为考虑到cpu有空闲,线程也没有阻塞现象。如果cpu没有空闲,或者线程中有不恰当的阻塞,那么多线程反而会让程序变慢。

你的程序实在是看不懂。不过看到你似乎有几个“变量”的命名类似与想搞什么“死循环的标志”的意思。如果真是如此,那么你设计的这种程序再妄想“用多线程执行”,那其实很可能就是灾难的。

多线程的程序设计,首先还是要在线程所执行的方法中尽量去掉“循环、阻塞”的语句,这样才能避免因为多线程而带来灾难性后果。
  相关解决方案