[C#] OnMouseEnter lässt svhost.exe Abstürtzen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von SchOudeBläS, 12. Dezember 2009 .

Schlagworte:
  1. 12. Dezember 2009
    OnMouseEnter lässt svhost.exe Abstürtzen

    Hey,

    ich habe ein kleines SchiffeVersenken spiel programmiert. Als ich gestern dann den Abstand zwischen den Schiffen einbauen wollte musste ich die IF abfragen im Eventhandler erhöhen. (erstmal nur bei senkrecht; die Abfragen auf SPACE) Jetzt stürzt mir leider jedes Mal wenn ich zu schnell über die DataGridZellen mit der Maus fahre die svhost.exe ab.

    Es entsteht dabei aber keine Exception, da diese sonst abgefangen würde. Was kann ich dagegen machen??

    Hier die Funktion, die durch das Event aufgerufen wird:

    Code:
     /// <summary>
     /// Tritt ein, wenn mit der Maus über das eigene Spielfeld gefahren wird 
     /// und zeigt gegebenenfalls neue Schiffe an
     /// </summary>
     /// <param name="sender"></param>
     /// <param name="e"></param>
     private void dataGridView_field_my_CellMouseEnter(object sender, DataGridViewCellEventArgs e)
     {
     if (!Prepared) // Wenn noch nicht Vorbereitet,
     { //dann dürfen Schiffe gesetzt werden
     try
     {
     if (senkrecht) //Senkrecht
     {
     switch (SHIPART) //Je nach Schiffart andere Größe anzeigen
     {
     case (int)boat.kind.UBoot:
     if (e.RowIndex + 1 < RANGE &&
     field_my[e.ColumnIndex, e.RowIndex] != SCHIFF &&
     field_my[e.ColumnIndex, e.RowIndex] != SPACE &&
     field_my[e.ColumnIndex, e.RowIndex + 1] != SCHIFF &&
     field_my[e.ColumnIndex, e.RowIndex + 1] != SPACE)
     {
     field_my[e.ColumnIndex, e.RowIndex] = WEIß;
     field_my[e.ColumnIndex, e.RowIndex + 1] = WEIß;
     }
     break;
     case (int)boat.kind.Kreuzer:
     if (e.RowIndex + 2 < RANGE &&
     field_my[e.ColumnIndex, e.RowIndex] != SCHIFF &&
     field_my[e.ColumnIndex, e.RowIndex + 1] != SCHIFF &&
     field_my[e.ColumnIndex, e.RowIndex + 2] != SCHIFF &&
     field_my[e.ColumnIndex, e.RowIndex] != SPACE &&
     field_my[e.ColumnIndex, e.RowIndex + 1] != SPACE &&
     field_my[e.ColumnIndex, e.RowIndex + 2] != SPACE)
     {
     field_my[e.ColumnIndex, e.RowIndex] = WEIß;
     field_my[e.ColumnIndex, e.RowIndex + 1] = WEIß;
     field_my[e.ColumnIndex, e.RowIndex + 2] = WEIß;
     }
     break;
     case (int)boat.kind.Zerstörer:
     if (e.RowIndex + 3 < RANGE &&
     field_my[e.ColumnIndex, e.RowIndex] != SCHIFF &&
     field_my[e.ColumnIndex, e.RowIndex + 1] != SCHIFF &&
     field_my[e.ColumnIndex, e.RowIndex + 2] != SCHIFF &&
     field_my[e.ColumnIndex, e.RowIndex + 3] != SCHIFF &&
     field_my[e.ColumnIndex, e.RowIndex] != SPACE &&
     field_my[e.ColumnIndex, e.RowIndex + 1] != SPACE &&
     field_my[e.ColumnIndex, e.RowIndex + 2] != SPACE &&
     field_my[e.ColumnIndex, e.RowIndex + 3] != SPACE)
     {
     field_my[e.ColumnIndex, e.RowIndex] = WEIß;
     field_my[e.ColumnIndex, e.RowIndex + 1] = WEIß;
     field_my[e.ColumnIndex, e.RowIndex + 2] = WEIß;
     field_my[e.ColumnIndex, e.RowIndex + 3] = WEIß;
     }
     break;
     case (int)boat.kind.Flugzeugträger:
     if (e.RowIndex + 4 < RANGE &&
     field_my[e.ColumnIndex, e.RowIndex] != SCHIFF &&
     field_my[e.ColumnIndex, e.RowIndex + 1] != SCHIFF &&
     field_my[e.ColumnIndex, e.RowIndex + 2] != SCHIFF &&
     field_my[e.ColumnIndex, e.RowIndex + 3] != SCHIFF &&
     field_my[e.ColumnIndex, e.RowIndex + 4] != SCHIFF &&
     field_my[e.ColumnIndex, e.RowIndex] != SPACE &&
     field_my[e.ColumnIndex, e.RowIndex + 1] != SPACE &&
     field_my[e.ColumnIndex, e.RowIndex + 2] != SPACE &&
     field_my[e.ColumnIndex, e.RowIndex + 3] != SPACE &&
     field_my[e.ColumnIndex, e.RowIndex + 4] != SPACE)
     {
     field_my[e.ColumnIndex, e.RowIndex] = WEIß;
     field_my[e.ColumnIndex, e.RowIndex + 1] = WEIß;
     field_my[e.ColumnIndex, e.RowIndex + 2] = WEIß;
     field_my[e.ColumnIndex, e.RowIndex + 3] = WEIß;
     field_my[e.ColumnIndex, e.RowIndex + 4] = WEIß;
     }
     break;
     }
     }
     else //waagerecht
     {
     switch (SHIPART)
     {
     case (int)boat.kind.UBoot:
     if (e.ColumnIndex + 1 < RANGE &&
     field_my[e.ColumnIndex, e.RowIndex] != SCHIFF &&
     field_my[e.ColumnIndex + 1, e.RowIndex] != SCHIFF)
     {
     field_my[e.ColumnIndex, e.RowIndex] = WEIß;
     field_my[e.ColumnIndex + 1, e.RowIndex] = WEIß;
     }
     break;
     case (int)boat.kind.Kreuzer:
     if (e.ColumnIndex + 2 < RANGE &&
     field_my[e.ColumnIndex, e.RowIndex] != SCHIFF &&
     field_my[e.ColumnIndex + 1, e.RowIndex] != SCHIFF &&
     field_my[e.ColumnIndex + 2, e.RowIndex] != SCHIFF)
     {
     field_my[e.ColumnIndex, e.RowIndex] = WEIß;
     field_my[e.ColumnIndex + 1, e.RowIndex] = WEIß;
     field_my[e.ColumnIndex + 2, e.RowIndex] = WEIß;
     }
     break;
     case (int)boat.kind.Zerstörer:
     if (e.ColumnIndex + 3 < RANGE &&
     field_my[e.ColumnIndex, e.RowIndex] != SCHIFF &&
     field_my[e.ColumnIndex + 1, e.RowIndex] != SCHIFF &&
     field_my[e.ColumnIndex + 2, e.RowIndex] != SCHIFF &&
     field_my[e.ColumnIndex + 3, e.RowIndex] != SCHIFF)
     {
     field_my[e.ColumnIndex, e.RowIndex] = WEIß;
     field_my[e.ColumnIndex + 1, e.RowIndex] = WEIß;
     field_my[e.ColumnIndex + 2, e.RowIndex] = WEIß;
     field_my[e.ColumnIndex + 3, e.RowIndex] = WEIß;
     }
     break;
     case (int)boat.kind.Flugzeugträger:
     if (e.ColumnIndex + 4 < RANGE &&
     field_my[e.ColumnIndex, e.RowIndex] != SCHIFF &&
     field_my[e.ColumnIndex + 1, e.RowIndex] != SCHIFF &&
     field_my[e.ColumnIndex + 2, e.RowIndex] != SCHIFF &&
     field_my[e.ColumnIndex + 3, e.RowIndex] != SCHIFF &&
     field_my[e.ColumnIndex + 4, e.RowIndex] != SCHIFF)
     {
     field_my[e.ColumnIndex, e.RowIndex] = WEIß;
     field_my[e.ColumnIndex + 1, e.RowIndex] = WEIß;
     field_my[e.ColumnIndex + 2, e.RowIndex] = WEIß;
     field_my[e.ColumnIndex + 3, e.RowIndex] = WEIß;
     field_my[e.ColumnIndex + 4, e.RowIndex] = WEIß;
     }
     break;
     }
     }
     }
     catch (Exception ex)
     {
     //Errorlog schreiben
     StreamWriter sw = new StreamWriter(@"errorlog.txt", true);
    
     sw.WriteLine(DateTime.Now + " --> " + ex.Message);
    
     sw.Flush();
     sw.Close();
     sw.Dispose();
     }
     
     refresh_field_my(); //Anzeige aktualisieren
     }
     }
    Wenn noch Fragen offen sind beantworte ich sie euch gerne damit ihr mir bitte helfen könnt.

    Danke:]
     
  2. 13. Dezember 2009
    AW: OnMouseEnter lässt svhost.exe Abstürtzen

    ich habe lange kein c# mehr programmiert. dennoch gibt es für solche probleme allgemeine lösungen. ob das jetzt klappt weiß ich nicht, aber du kannst ja die events, die eintreffen verarbeiten. mir scheint es so, als würdest du bei ansprechender geschwindigkeit mit der maus sehr viele events erzeugen.

    eventuell findest du eine möglichkeit, dass du jeden event von der maus, der eintrifft, ersteinmal in einen neuen buffer schreibst und diese queue dann nach dem FIFO prinzip abarbeitest.

    wie gesagt mir ist die architektur dahinter nicht so gut bekannt, deswegen kann ich nicht sagen ob das was bringt.
     
  3. 13. Dezember 2009
    AW: OnMouseEnter lässt svhost.exe Abstürtzen

    Das wäre echt ne Idee!

    Ich müsste auch immer nur das letzte Event abarbeiten, da sich ja eh schon die Position geändert hat und dadurch die Verarbeitung des Events eh sofort rückgängig macht, wenn das nächste abgearbeitet wird.

    Mmh. Schonmal jemand solch ein Problem gehabt und gelöst ?
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.