Entwickler-Ecke

C# - Die Sprache - Umzug von WinForm-APP auf Konsole-APP


tomycat - Do 15.07.21 19:42
Titel: Umzug von WinForm-APP auf Konsole-APP
hallo zusammen,

ich ziehe gerade mein Projekt von Umzug von WinForm-APP auf Konsole-APP um.

1.Frage:
Ich habe immer mit public und private gearbeitet, mit der Konsole-APP habe ich jetzt static?!
Was ist jetzt genau anders?

2.Frage:
Ich habe in WinForm -> await Task.Delay(5000); <- benutzt.
Leider Ignoriert jetzt VS diese Zeile?!
Gibt es eine Alternative?

Moderiert von user profile iconTh69: C#-Tags hinzugefügt


Ralf Jansen - Do 15.07.21 19:54

Die Main Methode sieht vermutlich so aus static void Main ... das kannst du einfach in static async Task Main ... ändern. Also "void" durch "async Task" ersetzen. Dann geht async/await wieder.
Das sollte in jeder halbwegs aktuellen c# Version (ab 7.1) gehen.

Deine erste Frage ist mir zu Basic. Allgemein static hat nix mit Sichtbarkeiten wie public/private zu tun. Du hast aber die Begriffe, weißt hoffentlich wo die Dokumentation ist und kannst das schnell nachlesen.
Wenn dann Fragen offen sind, frag dann konkreter nochmal.

Moderiert von user profile iconTh69: C#-Tags hinzugefügt


tomycat - So 18.07.21 18:50

thx,
das waren die richtige Worte,

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
static async Task Main(string[] args)
{     
    // gehe in die Klasse und hole grosse Liste...

    await Task.Delay(10000);

    ABC abc = new ABC();
         
    for (int a = 0; a <= irgend_ein_inhalt.GetUpperBound(0); a++)
    {            
        abc.id_search[a] = info_balbla[a];
    }
    abc.create_search();
}

//Schnipp

//Klasse abc...............................

public string[] id_search = new string[10];

internal class ABC
{
    public async void just_search()
    {
        GO_TO_WEB go_to_web = new GO_TO_WEB();

        for (int a = 0;a < 10; a++)
        {
            go_to_web.inhalt[a] = irgendwas[a];
            await Task.Delay(1100);                  /////////////// Zeile des Knackpunktes...
            Console.WriteLine("-->"); 
            string result = await go_to_web.LoaderAsync();
            Console.WriteLine(result);
        }
    }
}

//Klasse go_to_web.............................

public async Task<string> LoaderAsync()
{          
    using (var httpClient = new HttpClient())
        result = await httpClient.GetStringAsync(anfrage);                   
   
    return result;
}

Ich starte mein Programm und es wird die Liste von Internet abgerufen. Das geht.
Nach 10 Sekunden soll die Klasse abc aufgerufen werden.
Wenn ich die Zeile Knackpunkte ausdokumentiere wird --> angezeigt und das Programm wird beendet. Mit der Zeile Knackpunkt wird das Programm sofort beendet.

Moderiert von user profile iconTh69: unnötiges Zitat entfernt.


Th69 - So 18.07.21 19:32

Zeige mal noch den Code für

C#-Quelltext
1:
// gehe in die Klasse abc                    


Btw.: abc ist eine Methode, keine Klasse.


Ralf Jansen - So 18.07.21 20:29

die abc Methode ohne await davor aufgerufen?


tomycat - Di 20.07.21 22:07

user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
die abc Methode ohne await davor aufgerufen?


nein,
mit der Form1 Projekt gings.

Ich habe den Quellcode geändert.


Ralf Jansen - Di 20.07.21 22:37

wenn create_search die Methode just_search Methode ist dann hast du die ohne await aufgerufen.

Heißt, das hatten wir zuletzt jetzt aber schon mehrmals, das der Programmablauf an der Stelle nicht hält und wartet bis create_search/just_search fertig ist sondern weiter läuft.
Das danach deine Main Methode zu Ende ist heißt dein Programm ist dann auch zu Ende egal ob create_search/just_search fertig ist.