我正在从关闭文档的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你能详细说说吗?谢谢!
答案 0 :(得分:1)
如果必须等待每个线程完成,您可以在一个线程中调用所有代码。如果你想避免冻结UI - 创建一个方法:
public void DoWork()
{
foreach(/* your code here*/)
{
// do work with documents
}
}
并在非ui线程上运行它。
答案 1 :(得分:0)
在没有看到您的代码的情况下,我无法回答您的具体情况,但请查看lock关键字和/或等待句柄
请看这个链接:
答案 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
方法。您可以通知您的等待线程您的文档已关闭,然后您可以继续。