Referenca za non-visual komponente i pozadinsku obradu u WinForms-u na .NET 10 (net10.0-windows). Izvorni projekat: C:\Users\Kimi\source\repos\WinFormsApp-test.
| Stranica | Fajl | Šta rešava |
|---|---|---|
| Serijski port | SerialPortComponent.cs | Vraća SerialPort u Toolbox (u .NET-u ga tamo nema) |
| TCP i TLS | TcpClientComponent.cs | Sirova TCP veza ka uređaju, opciono šifrovana (TLS) |
| HTTP i HTTPS | HttpClientComponent.cs | GET/POST ka web servisima i API-jima |
| Dugačak posao | BatchJob.cs, UiLogSink.cs | Obrada u pozadini sa progresom, logom, pauzom i prekidom |
| Terminal | ShellSession.cs | Živ cmd / powershell / pwsh: komande unutra, izlaz napolje |
| Forma koja spaja | WorkerDemoForm.cs | Sve gore zajedno, bez blokiranja UI-a |
U .NET Framework 4.x SerialPort je deo framework-a i stoji u Toolbox-u pod Components. U .NET 5+ System.IO.Ports je zaseban NuGet paket, pa ga Toolbox ne vidi.
Dva slučaja:
Component (SerialPort, FileSystemWatcher, Process...): samo je nasledi.Component ili je sealed (TcpClient, HttpClient, tvoje klase): napravi klasu : Component koja drži originalni objekat unutra i izlaže samo ono što treba.Posle Build-a komponenta se pojavljuje u Toolbox-u pod „<ImeProjekta> Components". Ako je nema: Tools → Options → Windows Forms Designer → General → AutoToolboxPopulate = True, pa zatvori i otvori formu.
| Deo | Zašto |
|---|---|
: Component | Bez toga nema Toolbox-a ni trake ispod forme |
Konstruktor (IContainer container) | Dizajner ga ubacuje u components → zatvara se zajedno sa formom |
[ToolboxItem(true)] | Prikaži u Toolbox-u |
[DesignerCategory("Code")] | Dvoklik na fajl otvara kod, ne prazan dizajner |
[Category], [Description] | Grupisanje i opis u Properties prozoru |
[DefaultValue] | Ne upisuje se u Designer.cs dok se ne promeni; izmenjeno je podebljano |
[Browsable(false)] + DesignerSerializationVisibility.Hidden | Za runtime svojstva (IsConnected) koja dizajner ne sme da snima |
[DefaultEvent] | Šta otvara dvoklik na komponentu (kod Timer-a je to Tick) |
SynchronizationContext | Eventi stižu na UI nit → u handleru nema Invoke |
Dispose(bool) | Oslobađa unutrašnji objekat |
ConnectAsync, Open). Ako baš mora: if (DesignMode) return;.