Aplikácia bez formu   zodpovězená otázka

Architektura, WinForms

Dobry den ,robim aplikaciu ktora nema Form (GUI) a staci aby tam boli pouzite Class.

Doteraz som robil aplikacie s niakou Form a preto sa vtom moc dobre nevyznam. Ked som si vytvoril prazdny projekt -> pridal Class a vytvoril vnej 8 Timerou (Private Timer As New System.Timers.Timer(15000) pridal knim AddHandler (AddHandler Timer_Log.Elapsed, AddressOf Timer_Log_Elapsed) a napisal desiatky Sub-ou ktore sa staraju aby v aplikacii vsetko islo narazil som na dost neprijemny problem. Pri kompilacii mi napisalo ze v Project1 nebolo najdene Sub Main.

Nasledne som tam pridal Public Shared Sub Main ale po spusteni aplikacie sa spustil len kod v Public Shared Sub Main a aplikacia sa ukoncila na End Sub ktory patri Public Shared Sub Main.

Aj ked som pouzil kod :

Public Shared Sub Main
DalsiSub()
End Sub

Public Shared Sub DalsiSub()
Msgbox("ok")
End Sub

tak sa DalsiSub() nespustil ale aplikacia sa sama ukoncila.

Viete mi poradit aky tip projektu si mam vybrat alebo ako upravit aplikaciu tak aby sa neukoncila pri End Sub ?

Nevadi mi ak by som musel namiesto Class pouzit Module (ked som to skusal tak aj s pouzitim Module sa aplikacia vypla po Public Sub Main) Jednoducho nieje niaka cesta ako by sa dalo vytvorit projekt bez Form a aby bezala ta aplikacia tak ako keby tam bol Form ?

Doteraz som pouzival klasicku Form aplikaciu a form som nastavil na TaskBar = False , a este aby sa pri spusteni aplikacie okno schovalo a vtedy aplikacia bezala v poriadku a boli spristupnene moznosti ako Application.ExecutablePath ktore v Cistom Projekte + Class niesu. Ide mi hlavne oto aby aplikacia zbytocne "nezrala" 25MB z pamate ram ked sa GUI nevyuziva.

Predom Dakujem za odpoved.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zaprvé to, že aplikace má okno, nežere 25 MB paměti navíc, a i kdyby, tak to je úplně jedno, paměti má každý dost a když ne, tak si ji koupí.

Pokud nechcete, aby aplikace byla okenní, protože to nedává v daném případě smysl, máte dvě možnosti - udělat aplikaci konzolovou (v takovém případě se ale při jejím spuštění zobrazí příkazový řádek), anebo koncipovat ji jako službu, což je ale složitější na implementaci a na testování, protož služba se mus registrovat, což není pro začátečníka taková trivialita.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Teda myslíte že môžem použiť skytú form ? Lebo Console sa skryť nedá a Service som skúšal ale do toho sa babrať nechcem.

A posúdte sám že je to trošku moc 25 až 32MB pri úplne obyčajnej aplikácii. Myslím že iné OO aplikácie v jazykoch ako Delphi alebo Visual Basic 6 žerú menej.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Myslím, že těch 25MB není dané samotnou aplikací, ale načtením knihoven, které aplikace volá ke svému spuštění.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To je jasné lebo celý framework je len kopa knižníc ktoré aplikácia volá pre svoj beh :)

Škoda že sa to nedá niako ovplivniť aby nevytváralo Form :/

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Nevím co řešíte. Pokud potřebujete aplikaci bez oken, použijte konzolovou aplikaci nebo službu. Co se týče využití paměti tak si uvědomte že .NET je Managed kód a ne nativní kód jako C++ nebo Delphi. Aplikace v Javě by zabírala ještě 2x tolik. Co se týče Sub Main tak je naprosto logické že program skončí skončením vstupní metody Main, pokud to tak nechcete, musíte tomu nějakým rozumným způsobem zabránit. Ve Windows Forms aplikacích to je řešeno běžící smyčkou zpráv, u her běžící renderovací smyčkou, velmi stručně řečeno.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

viete mi poradiť ako vytvoriť bežiacu smyčku spáv ? Je nato niaky krátky kód ? Bohužial som sa o tom ešte nedopočul...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Konzolová aplikace nemá smyčku zpráv a u Windows Forms je to zapouzdřené Windows API.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

dáte do Sub Main najprv kompletnú inicializáciu programu a následne Do..Loop a ako podmienku či beží dáte kontrolu, či nastala událosť, pri ktorej chcete ukončiť aplikáciu. nieje to smyčka správ, ale bude to fungovať.Naozajstná smyčka správ je v každom C++ programe, kt. využíva WinApi a je to while cyklus na konci procedúry WinMain. V .nete je na to Application.Run, ale keď použijete verziu bez parametra tak sa dá aplikácia uzkončiť iba pomocou Application.Exit prípadne vb.net príkaz End .

príklad pre konzolovú app.(príkazom Exit Do sa opustí cyklus a teda sa dojde na koniec Sub Main a to ukončí program):

Public Sub Main()
   Console.WriteLine("Press X to exit") REM Inicializácia
   Do REM Cyklus
      If Console.KeyAvailable Then REM Podmienky ukončenia
        If Console.ReadKey().Key = ConsoleKey.X Then
           Exit Do REM Ukončiť
        End If
      End If
   Loop
End Sub

nahlásit spamnahlásit spam 0 odpovědětodpovědět

dakujem vám za odpovede :)

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback