Hi all,
ich habe die Daten-Einlese-Funktion meiner WinForms-Anwendung wegen ihrer Größe (201 Zeilen) in eine separate Klasse ausgelagert. Sie soll asynchron laufen. In der Funktion gibt es mehrere Invoke-Aufrufe, welche allerdings nur auftreten, wenn es einen Fehler beim Einlesen gibt; also à la falsche Datei ausgewählt, String kann nicht zu Integer geparst werden. Da das aber nicht das erwartete Verhalten ist, steckt dieser Code halt in der Funktion, welche schön asynchron durchlaufen kann.
Sollte das nun doch gebraucht werden, gibt es einen Fehler, wenn ich
Dabei habe ich doch von FormMain eine neue Instanz erzeugt! Mit den Worten »wenn das Fensterhandle erstellt wurde« komme ich nicht weiter und mit ergoogelten Forumsbeiträgen im Internet auch nicht.
In FormMain wird die Funktion wie folgt aufgerufen:
in TextileParser.cs:
Edit 21:35 Uhr: Sonst schicke ich ein Event. Fiel mir gerade wieder ein.
ich habe die Daten-Einlese-Funktion meiner WinForms-Anwendung wegen ihrer Größe (201 Zeilen) in eine separate Klasse ausgelagert. Sie soll asynchron laufen. In der Funktion gibt es mehrere Invoke-Aufrufe, welche allerdings nur auftreten, wenn es einen Fehler beim Einlesen gibt; also à la falsche Datei ausgewählt, String kann nicht zu Integer geparst werden. Da das aber nicht das erwartete Verhalten ist, steckt dieser Code halt in der Funktion, welche schön asynchron durchlaufen kann.
C#-Quellcode
- DateTime LastChangeTime;
- bool successful4 = DateTime.TryParse(RAT[i + 4], out LastChangeTime);
- if (!successful4)
- {
- FM.Invoke((Action)(() => MessageBox.Show($"Einlesen nicht erfolgreich.\nIst das die richtige Datei?\n»{FullFileName}«",
- "Datenbank – Daten laden",
- MessageBoxButtons.OK,
- MessageBoxIcon.Hand)));
- return;
- }
Sollte das nun doch gebraucht werden, gibt es einen Fehler, wenn ich
FM.Invoke()
schreibe.
Unbehandelte Ausnahme: System.Reflection.TargetInvocationException: Ein Aufrufziel hat einen Ausnahmefehler verursacht. ---> System.InvalidOperationException: Invoke oder BeginInvoke kann für ein Steuerelement erst aufgerufen werden, wenn das Fensterhandle erstellt wurde.
bei System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous)
bei System.Windows.Forms.Control.Invoke(Delegate method, Object[] args)
bei System.Windows.Forms.Control.Invoke(Delegate method)
bei IA.TextfileParser.read_in_data() in C:\Users\...\InventoryApp\IA\TextfileParser.cs:Zeile 34.
bei IA.FormMain.<>c.<determine_power_of_decision>b__29_0() in C:\Users\...\InventoryApp\IA\FormMain.cs:Zeile 494.
bei System.Threading.Tasks.Task.InnerInvoke()
bei System.Threading.Tasks.Task.Execute()
Dabei habe ich doch von FormMain eine neue Instanz erzeugt! Mit den Worten »wenn das Fensterhandle erstellt wurde« komme ich nicht weiter und mit ergoogelten Forumsbeiträgen im Internet auch nicht.
In FormMain wird die Funktion wie folgt aufgerufen:
in TextileParser.cs:
C#-Quellcode
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- namespace IA
- {
- public sealed class TextfileParser
- {
- private readonly System.Globalization.CultureInfo Deu = new System.Globalization.CultureInfo("de-DE");
- private readonly FormMain FM = new FormMain();
- /// <summary>
- /// ready-made for asynchronous use
- /// </summary>
- public void read_in_data()
- {
- FM.Invoke((Action)(() =>
- {
- }));
- }
- }
- }
Edit 21:35 Uhr: Sonst schicke ich ein Event. Fiel mir gerade wieder ein.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Bartosz“ ()