减慢功能

Slowing down a function

我有一个 winforms 应用程序,我可以在 2 个公司(数据库)之间 select 并访问他们的 articles/items 以阻止或取消阻止它们。我通过 SAP B1 SDK 来完成。该功能有效,它按预期执行所有操作。 "problem" 是用户不喜欢它有多快(用户,我说的对吗?),他们让我把它调慢并添加一些视觉特征(进度条,lock/unlock 图片,附加标签) 这样他们就会知道是哪篇文章 blocked/unblocked.

这是我lock/unlock文章所在的功能:

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 但在几次失败尝试后我找不到插入代码行的位置,我尝试了操作前、操作中和操作后,但都没有成功。任何 ideas/suggestions 将不胜感激。

正在这些语句处进行锁定和解锁 oItem.Frozen = BoYesNoEnum.tYES;oItem.Frozen = BoYesNoEnum.tNO;。所以你不能从字面上 "go between" 执行那些语句。您所能做的就是在 Thread.Sleep 之前启用 WaitCursor,然后让 freezing/unfreezing 发生。这不会阻止锁定和解锁的快速进行,但是由于 WaitCursor 的影响,用户会觉得这个过程需要一些时间。

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

您可以将 Thread.SleepWaitCursor 结合使用,例如:

           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;
           }