0

ドキュメントを閉じる for ループ内からスレッドを呼び出しています。問題は、ループが継続し、スレッド内のコードが終了する前に別のドキュメントを開こうとすることです。ループを一時停止して、ドキュメントを閉じるイベントを待つにはどうすればよいですか。ありがとう。

編集

これが私のコードです...

    public void OpenFile()
    {
        for (int i = 0; i < 3; i++)
        {
            if (i != 1)
            {
                try
                {
                    uiApp.OpenAndActivateDocument(TargetPath(i));
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            ThreadPool.QueueUserWorkItem(new WaitCallback(CloseDoc));
        }
    }

    static void CloseDoc(object stateInfo)
    {
        try
        {
            SendKeys.SendWait("^{F4}");
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

CloseDoc の後に 'Thread.Sleep(3000)' を追加しようとしましたが、うまくいきませんでした。「手動/自動リセットイベントクラスのwaitoneメソッド」が私の最善の策のようです。@GAPS詳しく説明できますか?ありがとうございました!

4

4 に答える 4

1

各スレッドが終了するまで待機する必要がある場合は、1 つのスレッドですべてのコードを呼び出すことができます。UI のフリーズを回避したい場合は、メソッドを作成します。

public void DoWork()
{
   foreach(/*  your code here*/)
   {
      // do work with documents
   }
}

非UIスレッドで実行します。

于 2012-08-18T17:34:33.943 に答える
0

あなたのコードを見なければ、私はあなたの特定のケースについて答えることはできませんが、lock キーワードや待機ハンドルを調べてください。

このリンクを参照してください:

http://msdn.microsoft.com/en-us/library/ms173179.aspx

于 2012-08-18T17:34:28.953 に答える
0

このコードで試してください

 private object verrou = new object();

 for(int i = 0; i < index; i++)
 {
       lock (verrou )
        {
            // Access thread-sensitive resources.
        }
 }
于 2012-08-18T17:37:45.870 に答える
0

質問を詳しく説明してください...しばらくの間、質問に答えるために、 のwaitoneメソッドを使用することをお勧めしますmanual/auto reset event classes。ドキュメントが閉じられたことを待機中のスレッドに通知してから、続行できます。

自動リセット

手動リセット

于 2012-08-18T17:41:50.837 に答える