0

我有一个 winforms 应用程序,我可以在其中选择 2 家公司(数据库)并访问他们的文章/项目以阻止或取消阻止它们。我通过 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,但在几次尝试失败后我找不到插入代码行的位置,我尝试了之前、中间和之后的操作,但没有成功。任何想法/建议将不胜感激。

4

1 回答 1

1

锁定和解锁发生在这些语句 oItem.Frozen = BoYesNoEnum.tYES;oItem.Frozen = BoYesNoEnum.tNO;. 因此,您不能从字面上“在”这些语句的执行之间“穿行”。您所能做的就是WaitCursor在之前启用Thread.Sleep,然后让冻结/解冻发生。这不会阻止锁定和解锁的快速进行,但用户会因为WaitCursor效果而感到该过程需要一些时间。

总结:Waitcursor 启用 1 秒-为了视觉效果,我们欺骗用户在幕后发生了什么,但实际上除了改变光标之外什么都没有发生!

您可以使用Thread.Sleepwith WaitCursorlike:

           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;
           }
于 2015-11-11T17:58:54.397 回答