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)',但没有成功。看起来“手动/自动重置事件类中的等待方法”将是我最好的选择。@GAPS你能详细说明吗?谢谢!

4

4 回答 4

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 回答