57 votes

C #: "Une exception de la première chance du type 'System.InvalidOperationException'"

Travaillant sur une affectation de classe en C #, je suis tombé sur un blocage du programme sans erreur (sauf ce qui est écrit dans la fenêtre de débogage de VS2010). Voici le code typique causant le crash:

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

    }
}
 

... Qu'est-ce que j'oublie ici?

** EDIT **

Il n'y a pas d'erreur, le programme se termine comme si j'appelais 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).
 

153voto

Mark Avenius Points 7344

Si vous cochez Thrown pour Common Language Runtime Exception lors de la pause d'une fenêtre d'exception ( Ctrl + Alt + E dans Visual Studio), l'exécution doit alors être interrompue pendant le débogage lorsque l'exception est levée. .

Cela vous donnera probablement un aperçu de ce qui se passe.

Exemple de la fenêtre d'exceptions

0voto

Ran Points 4401

Pensez à utiliser System.Windows.Forms.Timer au lieu de System.Threading.Timer pour une application à interface graphique, pour les temporisateurs basés sur la file d'attente de messages Windows au lieu de threads dédiés ou du pool de threads.

Dans votre scénario, aux fins des mises à jour périodiques de l'interface utilisateur, cela semble particulièrement approprié, car vous n'avez pas vraiment de travail de fond ou de calcul long à effectuer. Vous voulez juste faire de petites tâches périodiques qui doivent se produire sur le thread d'interface utilisateur de toute façon.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X