CF3.5: Starta osynligt
Hur gör man för att få ett program att starta osynligt? Ett fönster ska visas senare, så programmet måste ha möjlighet att ladda fönster.
Thomas
Svara
Sv: CF3.5: Starta osynligt
Har inte så stor koll på VB.NET, men det borde vara likvärdigt med C# tycker jag. I C# finns en main-metod, i den anropas Application.Run för att öppna upp första fönstret. Om du väntar med det så rullar programmet helt utan fönster. Borde även gå att öppna ett formulär som man kör .Hide() på tycker jag.
Johan
Svara
Sv:CF3.5: Starta osynligt
Om jag startar med Sub Main istället för ett formulär så blir programmet osynligt, men då avslutas ju programmet direkt Main är klart.
I vanliga .NET verkar man kunna strunta i att skicka med ett formulär som en parameter, men i Compact Framework så måste man göra det.
Thomas
Svara
Sv: CF3.5: Starta osynligt
När main-metoden har kört klart så finns det inget mer att göra, alltså avslutas programmet. Du får se till att den inte kör klart. Vad ska programmet göra innan formuläret startar?
Johan
Svara
Sv:CF3.5: Starta osynligt
Jo jag förstår varför programmet avslutas, men hur kan man förhindra det?
Det ska vara till en samtalslogg ungefär, så jag vill att ett formulär visas när någon ringer. Det går kanske att få WM att starta programmet när någon ringer istället?
Thomas
Svara
Sv: CF3.5: Starta osynligt
Du förhindrar det genom att köra en loop i main som inte avslutas. Men det borde gå att öppna ett dolt formulär istället, det är säkert enklare.
Johan
Svara
Sv: CF3.5: Starta osynligt
Går det inte öppna med .Show och dölja med .Hide efteråt? Ev. kanske man måste köra .Hide i formulärets Load-händelse eller liknande.
Johan
Svara
Sv:CF3.5: Starta osynligt
Jo jag har för mig att jag har gjort något liknande tidigare, men då ser man ju att fönstret visas en kort stund och sen stängs. Måste ju finnas ett bättre sätt att lösa det.
Thomas
Svara
Sv: CF3.5: Starta osynligt
Nu hade jag inte WM emulatorn konfigurerad och orkar inte fixa med det, men såhär borde fungera tycker jag. Först öppnas Form1, 3 sekunder efter det är stängt öppnas det igen (i c# då).
[MTAThread]
static void Main()
{
Application.Run(new Form1());
System.Threading.Thread.Sleep(3000);
Application.Run(new Form1());
}
/Johan
Svara
Sv:CF3.5: Starta osynligt
Ja det ser helt korrekt ut. Men på vilket sätt hjälper det mig? Jag vill ju ha programmet rullandes utan att formen visas.
Thomas
Svara
Sv: CF3.5: Starta osynligt
Låt programmet göra det det ska göra, när ett fönster ska visas anropar du application.run. Problemet är att programmet stannar under tiden fönstret visas. Om du inte vill ha det så så måste du nog ha ett fönster liggandes dolt.
Johan
Svara
Sv:CF3.5: Starta osynligt
Men programmet ska ju ligga vilandes tills någon ringer. Att göra en oändlig loop tills det händer känns ju inte speciellt optimalt.
Thomas
Svara
Sv: CF3.5: Starta osynligt
Det måste finnas en loop som körs, annars avslutas applikationen. Det är vad som sker när man anropar Application.Run, det startas en message loop för formuläret. Skillnaden är att du inte behöver koda den själv. Så på ett eller annat sätt måste det finnas kod som körs i applikationen, men den behöver ju inte göra något vettigt (typ pausa med sleep under lämplig tid).
Johan
Svara
Sv:CF3.5: Starta osynligt
Vad består Application.Run av för loop då?
Det här blir ju att dra väldigt mycket CPU:
Do Until NågotHänder
Loop
Den här koden lär väl inte dra lika mycket, men det blir istället en seg respons på upp till X sekunder:
Do Until NågotHänder
Sleep(X sekunder)
Loop
Thomas
Svara
Sv: CF3.5: Starta osynligt
Har tyvärr inte koll på i detalj hur message loopen fungerar.
Om du gör en sleep i 50 eller 100 ms, är det verkligen ett problem med en sådan fördröjning?
Johan
Svara
Sv: CF3.5: Starta osynligt
Jag är inte så bra på CF. Men finns det typ någon WindowsService i CF? Om det gör det låt en service ligga och vänta på ett samtal och om du får ett samtal starta din app från servicen
Svara