2015-11-11 31 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

工作就像一個魅力!謝謝! –