Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - c# Forzare la visualizzazione di una form
Forum - C# / VB.NET - c# Forzare la visualizzazione di una form

Avatar
fosforo (Normal User)
Expert


Messaggi: 305
Iscritto: 06/04/2009

Segnala al moderatore
Postato alle 17:26
Martedì, 04/12/2018
Ciao

All'interno di una form lancio un Process.Start("....");
Il comando mi blocca la visualizzazione corretta della form fino a quando
il programma lanciato non ha finito di girare.
Ho provato un po' di tutto ma non riesco a completare la form e poi lanciare il Process.Start.


Grazie anticipatamente



Scusate per la figuraccia.
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5714
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:39
Martedì, 04/12/2018
Ma non dovrebbe essere così. Il processo non influisce sul resto dell'applicazione.

Mostra più codice e dacci più dettagli.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1888
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 8:25
Mercoledì, 05/12/2018
Quoto nessuno,
Puoi mostrare in quale ambito fai partire il processo?

esempio: FormInitialize, Form Load etc.


PM Quote
Avatar
fosforo (Normal User)
Expert


Messaggi: 305
Iscritto: 06/04/2009

Segnala al moderatore
Postato alle 12:05
Mercoledì, 05/12/2018
Eccolo in working in process:

private void Live_Load(object sender, EventArgs e)
        {
…..    

           // init Process
            Play1.StartInfo.FileName = "ffplay.exe ";
            Play1.StartInfo.Arguments = " -af volume=0.0 -i indirizzo_stream -vf scale=400:190 ";
            Play1.StartInfo.CreateNoWindow = true;
            Play1.StartInfo.UseShellExecute = false;
……

              // Call StartStream fro start stream view          
               StartStream();      

}

private void StartStream()
        {
            //Play1 into panel 1
            Stopwatch sw1 = new Stopwatch();

            // inizio process per play
            Play1.Start();

            // impaginazione in una panel
            int timeout1 = 10 * 1000;
            while (Play1.MainWindowHandle == IntPtr.Zero)
            {
                Play1.Refresh();
            }
            if (sw1.ElapsedMilliseconds > timeout1)
            {
                sw1.Stop();
                return;
            }
            SetParent(Play1.MainWindowHandle, this.panel1.Handle);
            MoveWindow(Play1.MainWindowHandle, -10, -30, 420, 230, true);
}



Scusate per la figuraccia.
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5714
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 12:07
Mercoledì, 05/12/2018
E quindi, cosa c'entra quello che avevi scritto prima?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
fosforo (Normal User)
Expert


Messaggi: 305
Iscritto: 06/04/2009

Segnala al moderatore
Postato alle 15:35
Mercoledì, 05/12/2018
Che fino a quando non parte FFPLAY la form non si forma correttamente.
Si vedono alcune parti e alcune no.


Scusate per la figuraccia.
PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1888
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 15:42
Mercoledì, 05/12/2018
Non credo dipenda dal codice fosforo.

Avrei potuto dubitare se avevi fatto partire il processo al metodo Initialize.

Per sicurezza lancia tutto da un Thread separato.

Codice sorgente - presumibilmente C# / VB.NET

  1. Thread t = new Thread(StartStream());




Nel caso hai un errore di Cross Thread Violation.
Alla riga interessata aggiungi:


Codice sorgente - presumibilmente Plain Text

  1. Invoke((Action)delegate{   //Codice della linea   });




In Questo modo il ciclo sul processo agisce su in Thread separato dal form.
Così non dovresti avere problemi.


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5714
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 18:41
Mercoledì, 05/12/2018
Sposta il codice dall'evento Load all'evento Shown


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote