Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. 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: 391
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


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
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 (Admin)
Guru^2


Messaggi: 2305
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.


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
fosforo (Normal User)
Expert


Messaggi: 391
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);
}


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
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: 391
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.

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
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.


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
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