bearbeitenC# winforms: Ist meine Trennung von GUI und Logik korrekt?
Basierend auf Anregungen unter der logischen Code GUI Delegierten zu schicken, kam ich mit Code wie folgt auf:
Action ClearFunction = new Action(()=>Invoke(new Action(delegate() { ResultsBox.Clear(); })));
Ist es möglich, dies zu verkürzen?
Hier ist ein Teil meiner C# Windows Forms Programm.
Als ich anfing, den Code in einen anderen Thread zu konvertieren, begann er sich sehr unhandlich zu fühlen, als ich Threads erzeugte und öffentliche Methoden in Delegaten erstellte, sodass der Logikcode tatsächlich die GUI verwenden konnte.
Bitte geben Sie Vorschläge für bessere Idiome oder Verbesserungen der Architektur. Vielen Dank.
// form1.cs
public void ClearResultsBox()
{
ResultsBox.Clear();
}
public void PrintResults(string s)
{
ResultsBox.AppendText(s);
}
private void SearchButton_Click(object sender, EventArgs e)
{
var t = new Thread(() => SearchCore.Execute(DirectoryBox.Text, SearchBox.Text, this));
t.Start();
}
// logic.cs
class SearchCore
{
delegate void ClearFunction();
delegate void AppendFunction(string a);
static ClearFunction clear;
static AppendFunction print;
public static void Execute(string path, string searchterm, MainForm form)
{
clear = new ClearFunction(() => form.Invoke(new ClearFunction(form.ClearResultsBox)));
print = new AppendFunction(s => form.Invoke(new AppendFunction(form.PrintResults), s));
clear();
@senfo gibt es nicht wirklich viel mehr. Execute ist eine lange laufende Methode (2+ Minuten), die alle paar Sekunden ausgegeben wird. – Unknown
Könnten Sie bitte etwas mehr Details darüber geben, was Sie erreichen möchten? Sie haben einige ziemlich große Konstruktionsfehler, aber ich möchte Sie nicht in die falsche Richtung lenken, bis ich verstehe, wohin Sie gehen möchten. Versuchen Sie zum Beispiel einfach, die Benutzeroberfläche ansprechbar zu halten? – senfo
Entschuldigung, ich habe meinen Kommentar gelöscht, um ihn hinzuzufügen. – senfo