programing tip

C # : " 'System.InvalidOperationException'유형의 첫 번째 예외"

itbloger 2020. 12. 14. 07:56
반응형

C # : " 'System.InvalidOperationException'유형의 첫 번째 예외"


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

    }
}

... 내가 여기서 뭘 놓치고 있니?

** 수정 **

오류가 없어요, 제가 전화하는 것처럼 프로그램이 종료 됩니다.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).

당신이 선택하면 Thrown위한 Common Language Runtime Exception휴식 시간에 할 때 예외 창 ( Ctrl+ Alt+ EVisual Studio에서) 예외가 발생했을 때 디버깅하는 동안 다음 실행을 중단해야한다.

이것은 아마도 무슨 일이 일어나고 있는지에 대한 통찰력을 줄 것입니다.

Example of the exceptions window


The problem here is that your timer starts a thread and when it runs the callback function, the callback function ( updatelistview) is accessing controls on UI thread so this can not be done becuase of this


Consider using System.Windows.Forms.Timer instead of System.Threading.Timer for a GUI application, for timers that are based on the Windows message queue instead of on dedicated threads or the thread pool.

In your scenario, for the purpose of periodic updates of UI, it seems particularly appropriate since you don't really have a background work or long calculation to perform. You just want to do periodic small tasks that have to happen on the UI thread anyway.

참고URL : https://stackoverflow.com/questions/4393092/c-sharp-a-first-chance-exception-of-type-system-invalidoperationexception

반응형