Hallo zusammen,
ich habe eine Code der eine Programmierung übernimmt. Die Programmierung wird als Taks aufgerufen und in einer anderen Klasse abgelaufen.
await Task.Run(() => prog.programming(COM\_Port, PathFile));
Es läuft auch sehr gut. Die Ausgaben werden über einen OutputHandler erfasst und in der Console ausgegeben zudem in einer Variablen.
Meine Frage ist jetzt, ob es irgendwie möglich ist, die Daten aus der Variablen mit dem Programmier Fortschritt der sonst in die Console ausgegeben werde, an die Form1 zu schicken um diese dort in einer Textbox auszugeben?
Gruß
Stefan
Hallo Stefan7907,
über Ereignisse kann das bewerkstelligt werden. Siehe dazu [FAQ] Eigenen Event definieren / Information zu Events (Ereignis/Ereignisse).
eine Code der eine Programmierung übernimmt
Wie ist das gemeint? Jeder Code ist für Programmierung od. verstehe ich hier den Hintergrund nicht.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Danke für die Info. Mit den Events werde ich mich jetzt beschäftigen.
"Wie ist das gemeint? Jeder Code ist für Programmierung od. verstehe ich hier den Hintergrund nicht." → das war nur eine grobe Info was der Code macht, für das Problem quasi egal.
Ich habe das jetzt für mich gelöst, vielleicht hilft das auch noch anderen:
Programming Klasse:
public EventHandler<DataProcessedEventArgs> ProcessInformation;
public class DataProcessedEventArgs : EventArgs
{
public string Data { get; set; }
public DataProcessedEventArgs(string data)
{
Data = data;
}
}
void OutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
ProcessInformation?.Invoke(this, new DataProcessedEventArgs(dataLine));
}
Form1:
async void work_A(COM_Port)
{
prog.ProcessInformation += ProcessInformationen;
await Task.Run(() => prog.programming(COM_Port, PathFile));
}
private void ProcessInformationen(object sender, DataProcessedEventArgs e)
{
Console.WriteLine($"Daten: {e.Data}");
SafeSetText(Form1.Instance.tb_A_Infobox, e.Data);
}
public static void SafeSetText(Control control, string text)
{
if (control.InvokeRequired)
{
control.Invoke((MethodInvoker)(() => control.Text = text));
}
else
{
control.Text = text;
}
}
Falls es nur um den Fortschritt geht wäre auch IProgress<T>
etwas.
Mit freundlichen Grüßen
lutzeslife