暂停循环直到事件

时间:2012-08-18 17:31:09

标签: c# events for-loop

我正在从关闭文档的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 个答案:

答案 0 :(得分:1)

如果必须等待每个线程完成,您可以在一个线程中调用所有代码。如果你想避免冻结UI - 创建一个方法:

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

并在非ui线程上运行它。

答案 1 :(得分:0)

在没有看到您的代码的情况下,我无法回答您的具体情况,但请查看lock关键字和/或等待句柄

请看这个链接:

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

答案 2 :(得分:0)

尝试使用此代码

 private object verrou = new object();

 for(int i = 0; i < index; i++)
 {
       lock (verrou )
        {
            // Access thread-sensitive resources.
        }
 }

答案 3 :(得分:0)

请详细说明你的问题...... 暂时回答您的问题,我建议您在waitone中使用manual/auto reset event classes方法。您可以通知您的等待线程您的文档已关闭,然后您可以继续。

AutoReset

ManualReset