Har lite problem med en funktion i ett program som jag i dagsläget håller på att programmera i VB.NET..
Vad jag vill åstadkomma är att man genom att kunna klicka på en länk på vår hemsida (T.ex program1:order:20383) så ska vårt program startas och öppna en order med nummer 20383 helt enkelt. Hit är det inga problem.
Det blir dock problem om programmet redan är startat och kunden klickar på länken för då öppnas programmet på nytt vilket inte är något vidare om man ska använda funktionen 50-80 gånger per dag..
Som jag har försökt med nu så låter jag programmet starta en extra instans, men jag har även en funktion som kontrollerar om programmet redan är öppnat.
Om det redan är öppnad så stängs det nuvarande programmet.
Men så som jag vill att det ska fungera så ska programmet dels trigga en funktion i den första instansen som ska användas och även sätta fokus på fönstret.
Har ni några förslag på hur detta kan lösas?
Känns som att jag har försökt med allting i princip men jag lyckas helt enkelt inte, även med en massa hjälp av Google.
Men så som jag vill att det ska fungera så ska programmet dels trigga en funktion i den första instansen som ska användas och även sätta fokus på fönstret.
Har du inte möjligheten i System.Diagnostik att få en referens till en redan befintlig instans. För om du kan få det så borde det ju inte vara så svårt att lösa.
En betydligt mer komplex väg är att använda sig av Remoting/WCF för att anropa den befintliga instansen, men det känns lite som overkill, även om det är fullt möjligt att göra det du vill med en sådan lösning.
Men så som jag vill att det ska fungera så ska programmet dels trigga en funktion i den första instansen som ska användas och även sätta fokus på fönstret.
Har du inte möjligheten i System.Diagnostik att få en referens till en redan befintlig instans. För om du kan få det så borde det ju inte vara så svårt att lösa.
En betydligt mer komplex väg är att använda sig av Remoting/WCF för att anropa den befintliga instansen, men det känns lite som overkill, även om det är fullt möjligt att göra det du vill med en sådan lösning.
- M
Tyvärr verkar det inte gå med System.Diagnostik (Har iaf inte hittat någon information om någon sådan funktion) och Remoting känns som sagt lite overkill.
Har dock lyckat köra med en "fullösning" genom att den andra instansen av programmet skapar en textfil med ordernumret i programmappen som jag sedan övervakar med FileSystemWatcher. När textfilen ändras så öppnar programmet ordersidan och sätter fokus.
Tyvärr verkar det inte gå med System.Diagnostik (Har iaf inte hittat någon information om någon sådan funktion) och Remoting känns som sagt lite overkill.
Har dock lyckat köra med en "fullösning" genom att den andra instansen av programmet skapar en textfil med ordernumret i programmappen som jag sedan övervakar med FileSystemWatcher. När textfilen ändras så öppnar programmet ordersidan och sätter fokus.
Tänk på att alla användare inte har skrivrättigheter i programmappen.
1. Gå in till inställningarna för projektet och klicka i rutan "Make singel instance application".
2. Lägg till denna kod i ApplicationEvent.vb, ändra dock "Login" på alla ställen till den Form som är din Mainform.
Private Sub MyApplication_StartupNextInstance(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupNextInstanceEventArgs) Handles Me.StartupNextInstance
If TypeOf Me.MainForm Is Login Then
DirectCast(Me.MainForm, Login).InstanceActivate(e)
End If
End Sub
3. Lägg in denna kod i din MainForm. Det är denna Sub som körs varje gång användaren försöker köra en extra kopia av ditt program.
Friend Sub InstanceActivate(ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupNextInstanceEventArgs)
Dim strArgs = ""
If e.CommandLine.Count > 0 Then
For Each arg As String In e.CommandLine
strArgs = strArgs & arg
Next
End If
End Sub
Har du skickat med något argument när du startade den andra instansen så hamnar dom i variablen strArgs.
139 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe