变量仅在Thread.Sleep(1)之后填充

时间:2014-07-09 21:43:50

标签: c# asp.net multithreading

我有一个奇怪的情况。这是一段快速代码:

foreach (Microsoft.Office.Interop.Word.Pane pane in window.Panes)
{
    for (var i = 1; i <= pane.Pages.Count; i++)
    {
        Microsoft.Office.Interop.Word.Page page = null;
        bool populated = false;
        while (!populated)
        {
            try
            {
                page = pane.Pages[i];
                populated = true;
            }
            catch (COMException ex)
            {
                Thread.Sleep(1);
                counter++;
            }
        }

出于某种原因,在第一次运行page = pane.Pages[i]时会抛出异常。在Thread.Sleep(1)之后,它会正确填充。

如果我删除while{}循环并进行逐步调试,一切正常。如果我在没有while{}循环的情况下运行它(F5)它会崩溃。我有两个问题。

  1. 发生了什么事,
  2. 有更优雅的方式来写这个吗?
  3. 我应该对易失性或锁定变量等功能进行一些研究吗? (虽然我不认为我可以将挥发性物质应用到任何东西上)。提前谢谢。

    哦,对于那些即将发布的人,请不要使用INTEROP,感谢您的圣人建议,但我现在别无选择,所以我将使用它:)

0 个答案:

没有答案