2015-11-11 33 views
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,但经过多次失败尝试后,我无法找到插入代码行的位置,我在尝试之前,中间和之后尝试过,但没有成功。任何想法/建议将不胜感激。

+0

你是什么意思时,你说你有没有和Thread.sleep代码()方法没有成功? – Han

+0

嗯,我很确定它会工作,但我尝试在函数的不同部分插入方法,它所做的只是等待,然后操作在相同的原始时间完成,所以它基本上只是在完成所有操作之前暂停操作。 @ Handoko.Chen –

回答

1

锁定和超频正在发生在这些陈述 oItem.Frozen = BoYesNoEnum.tYES;oItem.Frozen = BoYesNoEnum.tNO;。所以你不能从字面上“执行”这些语句。你所能做的只是在Thread.Sleep之前启用WaitCursor然后让冻结/解冻发生。这不会阻止锁定和解锁速度加快,但用户会因为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; 
      } 
+1

请参阅编辑 – Marshal

+0

工作就像一个魅力!谢谢! –