减慢功能

时间:2015-11-11 17:53:06

标签: c# winforms sapb1

我有一个winforms应用程序,我可以在两个公司(数据库)之间进行选择,并访问他们的文章/项目来阻止或取消阻止它们。我是通过SAP B1 SDK完成的。该功能有效,它按预期完成所有操作。 "问题"用户不喜欢它的速度有多快(用户,我是对的吗?)并且他们要求我慢一点并添加一些视觉功能(进度条,锁定/解锁图片,其他标签),以便他们能够使用它们。知道哪个文章被阻止/解锁。

这是我锁定/解锁文章的功能:

private void items()
        {
           string[] lines = textBox1.Lines;

           for (int i = 0; i <= lines.GetUpperBound(0); i++)
           {
               oItem = ((SAPbobsCOM.Items)(oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oItems)));
               oItem.GetByKey(lines[i]);
               if (comboBox1.Text == "Lock")
               {
                   oItem.Frozen = BoYesNoEnum.tYES;
               }
               else if (comboBox1.Text == "Unlock")
               {
                   oItem.Frozen = BoYesNoEnum.tNO;
               }
               lRetCode = oItem.Update();
               if (lRetCode != 0)
               {
                   oCompany.GetLastError(out lErrCode, out sErrMsg);
                   MessageBox.Show(lErrCode + " " + sErrMsg + " item: " + lines[i]);
               }
           }
        }

什么可能是实现这一目标的最佳和正确方法?我尝试使用Thread.Sleep,但经过几次尝试失败后,我无法找到插入代码行的位置,我在之前,之后和之后尝试过,但我没有成功。任何想法/建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

这些声明正在锁定和取消闪烁 oItem.Frozen = BoYesNoEnum.tYES;oItem.Frozen = BoYesNoEnum.tNO;。所以你不能在字面上&#34;介于&#34;之间。执行那些陈述。您所能做的就是在WaitCursor之前启用Thread.Sleep,然后让冻结/解冻。这不会阻止锁定和解锁快速进行,但是由于WaitCursor效果,用户会觉得该过程需要一些时间。

总结:Waitcursor启用了1秒 - 用于视觉效果,我们欺骗用户有些事情发生在幕后,但实际上没有任何事情发生,除了更改游标!

您可以Thread.Sleep使用WaitCursor,例如:

           if (comboBox1.Text == "Lock")
           {
               Cursor.Current = Cursors.WaitCursor;
               Thread.Sleep(1000);
               oItem.Frozen = BoYesNoEnum.tYES;
               Cursor.Current = Cursors.Default;
           }
           else if (comboBox1.Text == "Unlock")
           {
               Cursor.Current = Cursors.WaitCursor;
               Thread.Sleep(1000);
               oItem.Frozen = BoYesNoEnum.tNO;
               Cursor.Current = Cursors.Default;
           }