foreach循环之前的代码不执行

时间:2010-08-24 10:30:23

标签: c# .net winforms foreach

我终于想到了一个头衔!

我有一个foreach循环,它迭代ListViewItems并对每个项目执行某些操作。但问题不在于它不能在循环中完成工作,而是它不会执行任何在foreach循环之前出现的代码。

以下是完整的方法:

    private void pNGToolStripMenuItem_Click(object sender, EventArgs e)
    {
            stat.Text = "Converting to PNG.";
            _piclist.Enabled = false;

            foreach (ListViewItem item in _piclist.Items)
            {
                try
                {
                    /* magical image conversion here. */
                   _piclist.Enabled = true;
                       stat.Text =
                          "Conversion complete.";

                }
                catch (Exception exception)
                {
                    stat.Text =
                        exception.Message;

                }
            }
    }

有人可以帮我理解为什么代码:

stat.Text = "Converting to PNG.";
            _piclist.Enabled = false;

在foreach循环永远不会被执行之前?

由于

3 个答案:

答案 0 :(得分:4)

确实如此。问题是你的循环体会立即覆盖之前运行的代码的结果:

stat.Text = "Converting to PNG.";
            _piclist.Enabled = false;

           _piclist.Enabled = true;
               stat.Text =
                  "Conversion complete.";

您没有看到它,因为在您的方法执行时用户界面冻结,您只看到最后的更改。考虑使用线程,这里有一篇很棒的文章:http://msdn.microsoft.com/en-us/magazine/cc164037.aspx

答案 1 :(得分:3)

您是如何确认代码从未执行过的?你设置了一个断点吗?

输入foreach循环后,循环前设置的_piclist.Enabledstat.Text值将被新值覆盖(true"Conversion complete"。用户界面可能永远不会同时更新。

答案 2 :(得分:0)

听起来你没有用事件注册处理程序......(+ =)

马丁

聚苯乙烯。澄清 - 我说整个方法都没有被调用,因为我怀疑你没有为这个事件注册这个处理程序......