C#:“types'System.InvalidOperationException'的第一个机会exception”

在C#中处理类的分配,我遇到了一个没有任何错误的程序崩溃(除了在VS2010的debugging窗口中写的东西外)。 这是导致崩溃的典型代码:

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); } } } 

…我在这里错过了什么?

** 编辑 **

没有错误,程序就好像我会调用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). 

如果在exception窗口(Visual Studio中的Ctrl + Alt + E)中检查中断的Common Language Runtime Exception Thrown ,那么在Thrown Common Language Runtime Exception时,执行应该在debugging期间中断。

这可能会让你对发生的事情有所了解。

例外窗口的例子

这里的问题是你的计时器启动一个线程,当它运行callback函数时,callback函数(updatelistview)正在访问UI线程上的控件,所以这是不可能的,因为这个

考虑使用System.Windows.Forms.Timer而不是System.Threading.Timer作为GUI应用程序,用于基于Windows消息队列而不是专用线程或线程池的计时器。

在你的场景中,为了定期更新UI,看起来特别合适,因为你并没有真正的后台工作或长时间的计算。 你只是想要定期执行一些小任务,而这些任务在UI线程上必须发生。