0

2 つの会社 (データベース) から選択し、記事/アイテムにアクセスしてブロックまたはブロック解除できる 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ましたが、何度か失敗した後、コード行を挿入する場所が見つからず、前、中間、後の操作を試しましたが、成功しませんでした。どんなアイデアや提案も大歓迎です。

4

1 に答える 1

1

oItem.Frozen = BoYesNoEnum.tYES;ロックとアンクロックはこれらのステートメントとで行われ oItem.Frozen = BoYesNoEnum.tNO;ます。したがって、そのステートメントの実行を文字通り「切り替える」ことはできません。できることは、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;
           }
于 2015-11-11T17:58:54.397 に答える