我正在从一个关闭文档的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你能详细说明一下吗?谢谢!
发布于 2012-08-19 01:41:51
请详细说明您的问题...为了回答您的问题,我建议您在manual/auto reset event classes中使用waitone方法。您可以通知您的等待线程您的文档已关闭,然后您可以继续。
AutoReset
ManualReset
发布于 2012-08-19 01:34:34
如果你必须等待每个线程完成,你可以在一个线程中调用所有代码。如果您希望避免冻结UI -请创建一个方法:
public void DoWork()
{
foreach(/* your code here*/)
{
// do work with documents
}
}并在非ui线程上运行它。
发布于 2012-08-19 01:34:29
如果没有看到您的代码,我无法回答您的特定情况,但可以查看lock关键字和/或等待句柄
请参阅此链接:
http://msdn.microsoft.com/en-us/library/ms173179.aspx
https://stackoverflow.com/questions/12020725
复制相似问题