C#:"类型'System.InvalidOperationException'的第一次机会异常"

Yan*_*hon 57 c# crash

在C#中进行类赋值,我遇到了一个没有任何错误的程序崩溃(除了在VS2010的调试窗口中写的内容).以下是导致崩溃的典型代码:

public partial class Test : Form
{
    public Test()
    {
        InitializeComponent();
    }

    private void Test_Load(object sender, EventArgs e)
    {
        ColumnHeader header;

        header = new ColumnHeader();
        header.Text = "#";
        header.TextAlign = HorizontalAlignment.Center;
        header.Width = 30;
        listView1.Columns.Add(header);

        TimerCallback tcb = this.UpdateListView;

        System.Threading.Timer updateTimer = new System.Threading.Timer(tcb, null, 0, 1000);
    }

    public void UpdateListView(object obj)
    {
        ListViewItem item;
        listView1.Items.Clear();

        for (int i = 0; i < 10; i++)
        {
            item = new ListViewItem(i.ToString());

            listView1.Items.Add(item);
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

......我在这里失踪了什么?

**编辑**

没有错误,程序就像我打电话一样结束System.Environment.Exit(0);

A first chance exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll
The program '[4644] ProgramTest.vshost.exe: Managed (v4.0.30319)' has exited with code 0 (0x0).
The program '[4644] ProgramTest.vshost.exe: Program Trace' has exited with code 0 (0x0).
Run Code Online (Sandbox Code Playgroud)

Mar*_*ius 153

如果你选中ThrownCommon Language Runtime Exception在休息的时候异常窗口(Ctrl+ Alt+ E在Visual Studio),那么当你在当异常被抛出调试的执行应该打破.

这可能会让您对正在发生的事情有所了解.

例外窗口的示例

  • 是!我检查了所有"Thrown",我发现了错误,我添加了新项目(我已经缩小了)并得到了这个答案:"跨线程操作无效:控制'listView1'从线程以外的线程访问它创建于." ...谢谢你的捷径. (3认同)

小智 11

这里的问题是,你的计时器启动一个线程,当它运行的回调函数,回调函数(updatelistview)正在访问的UI线程控制,使这不能监守的做这个