none
WinForm - Asincronia e thread secondari RRS feed

  • Discussione generale

  • Salve a tutti,

    ho un problema di asincronia e thread secondari.

    Mi spiego meglio: devo richiamare un metodo che ad ogni pochi decimi di secondo (framerate = 60) mi cattura una bitmap attraverso un componente esterno.

    Il problema è che se richiamo questo metodo in modo asincrono (BackgroundWorker, Thread, Task.Factory,.... li ho provati tutti), mi crasha e addirittura il driver della scheda video smette di funzionare.

    Ho la necessità di tenere in asincrono questo metodo altrimenti la form nella quale viene richiamato questo metodo ovviamente si blocca e non è utilizzabile finchè il metodo non ha finito.

    • Tipo modificato Irina Turcu venerdì 18 aprile 2014 12:56 In attesa di maggiori dettagli nel caso l"OP volesse continuare il troubleshooting del problema.
    venerdì 11 aprile 2014 09:07

Tutte le risposte

  • Salve a tutti,

    ho un problema di asincronia e thread secondari.

    Mi spiego meglio: devo richiamare un metodo che ad ogni pochi decimi di secondo (framerate = 60) mi cattura una bitmap attraverso un componente esterno.

    Il problema è che se richiamo questo metodo in modo asincrono (BackgroundWorker, Thread, Task.Factory,.... li ho provati tutti), mi crasha e addirittura il driver della scheda video smette di funzionare.

    Ho la necessità di tenere in asincrono questo metodo altrimenti la form nella quale viene richiamato questo metodo ovviamente si blocca e non è utilizzabile finchè il metodo non ha finito.

    Probabilmente il callback asincrono sta tentando di aggiornare la GUI. Ma la GUI deve essere aggiornata solo dal thread che l'ha creata.

    venerdì 11 aprile 2014 09:28
  • È molto probabile.

    Ma la soluzione? :)

    venerdì 11 aprile 2014 09:35
  • ciao,

    scusa ma creando un nuovo thread e facendo le operazioni li dentro dici che ti si blocca? La UI del programma in quel caso non centra se la fai sui un thread diverso. E poi come l'hai gestita il cross trhread? Hai provato a impostare a CheckForIllegalCross su False?

    Se il problema persiste evidentemente non è un problema di "thread" ma sicuramente nel metodo che esegui da quel thread.

    venerdì 11 aprile 2014 09:45
  • Si ho creato un nuovo thread.
    venerdì 11 aprile 2014 09:46
  • È molto probabile.

    Ma la soluzione? :)

    Controlla la proprietà InvokeRequired.

    Qui ne avevamo parlato per VB.Net, ma la sostanza è la stessa:

    http://social.msdn.microsoft.com/Forums/vstudio/it-IT/30bb75b4-a87d-4e61-a62f-cd1b725662f0/vb2010-backgroundworker-delegare?forum=visualbasicit


    • Modificato BlueLed venerdì 11 aprile 2014 09:57
    venerdì 11 aprile 2014 09:52
  • Ciao Simone_Francio,

    Alla fine le risposte ricevute ti hanno aiutato ad individuare la causa del tuo problema? In tal caso, potresti gentilmente condividere sul forum maggiori dettagli, in modo che anche altri utenti potessero beneficiare dalla soluzione che hai trovato?

    Grazie in anticipo per la tua risposta.


    <QUESTO CONTENUTO È DISTRIBUITO "AS IS", ESCLUDENDO OGNI FORMA DI RESPONSABILITÀ DI QUALUNQUE GENERE, ESPLICITA O IMPLICITA>

    Grazie
    Il Supporto delle Comunità MSDN

    Vi preghiamo di ricordare a “Segnare come Risposta” i post che risolvono il vostro problema. Questa è di solito una modalità di riconoscimento verso chi vi ha aiutati, facilitando per il futuro la scoperta della risoluzione per gli altri visitatori.

    lunedì 14 aprile 2014 11:48
  • No, purtroppo le risposte non mi sono state d'aiuto.
    lunedì 14 aprile 2014 12:21
  • No, purtroppo le risposte non mi sono state d'aiuto.

    Ciao Simone,

    In questo caso sarebbe utile se potessi condividere un po' di codice - se non sappiamo come hai implementato il tuo programma resta un po' difficile aiutarti.


    <QUESTO CONTENUTO È DISTRIBUITO "AS IS", ESCLUDENDO OGNI FORMA DI RESPONSABILITÀ DI QUALUNQUE GENERE, ESPLICITA O IMPLICITA>

    Grazie
    Il Supporto delle Comunità MSDN

    Vi preghiamo di ricordare a “Segnare come Risposta” i post che risolvono il vostro problema. Questa è di solito una modalità di riconoscimento verso chi vi ha aiutati, facilitando per il futuro la scoperta della risoluzione per gli altri visitatori.

    lunedì 14 aprile 2014 13:33
  • temo purtoppo che sia troppo vasto il progetto e non facilmente sintetizzabile.
    lunedì 14 aprile 2014 13:35
  • temo purtoppo che sia troppo vasto il progetto e non facilmente sintetizzabile.

    Se vuoi, potresti farci vedere come richiami il metodo nel thread separato, e come stai catturando la Bitmap (mi chiedo anche di cosa si tratta quando dici che lo fai attraverso un componente esterno).

    Sai esattamente quale linea di codice ti crasha il driver della scheda video?


    <QUESTO CONTENUTO È DISTRIBUITO "AS IS", ESCLUDENDO OGNI FORMA DI RESPONSABILITÀ DI QUALUNQUE GENERE, ESPLICITA O IMPLICITA>

    Grazie
    Il Supporto delle Comunità MSDN

    Vi preghiamo di ricordare a “Segnare come Risposta” i post che risolvono il vostro problema. Questa è di solito una modalità di riconoscimento verso chi vi ha aiutati, facilitando per il futuro la scoperta della risoluzione per gli altri visitatori.

    martedì 15 aprile 2014 08:42
  • No non lo so perchè per qualche secondo gli schermi diventano neri e il visual studio si stoppa.

    Comunque vi ringrazio ma credo che cambierò totalmente via di risoluzione.

    martedì 15 aprile 2014 08:51