Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1

    [C#] Rendere asincrono un blocco di codice

    Qualcuno può indicarmi come rendere asincrono un intero blocco di codice?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    Dipende da cosa intendi per asincrno.
    Alcune classi del net framework presuppongono un achiamata asincrona ad un metodo..

    Tu cosa vuoi fare?

  3. #3
    Sto cercando di utilizzare i metodi BeginInvoke() e EndInvoke() per stampare a video una Form mentre eseguo una elaborazione. Sto utilizzando questa sintassi:

    codice:
    public void Elaborazione()
    {
      .....
    }
    
    public delegate void Elabora_Delegate();
    
    private void Esegui(object sender, EventArgs e)
    {
      Elabora_Delegate delegato = new Elabora_Delegate(Elaborazione);
      IAsyncResult asyncResult = delegato.BeginInvoke(null, null);
      Globale.elaborazione.Show(); // Form con il messaggio
      asyncResult.AsyncWaitHandle.WaitOne();
      delegato.EndInvoke(asyncResult);
    }
    In pratica non stampa il contenuto della Form quindi c'è ben poco di asincrono . . .
    Dato che è la prima volta che uso questa sintassi, chiedo conferma della sua correttezza.

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    Perchè al begininvoke passi due null?

  5. #5
    Perchè probabilmente ho sbagliato . . .

    Ma come parametro "AsyncCallBack callback" cosa dovrei passare? Come "object" penso nulla, il metodo richiamato non ha parametri di input e non ritorna nulla.

  6. #6
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    Prova a spiegare meglio cosa intendi fare e qual'è lo scopo.. detta così mi sembra più un tentativo accozzato che una cosa pensata.. crei un delegato di metodo, su questo fai una begininvoke con un null e poi mostri la form, dopo fai la endinvoke.. a ragionamento qui manca qualcosa..

  7. #7
    Il punto è che è la prima volta che utilizzo i metodi BeginInvoke() e EndInvoke() e non mi è chiaro il funzionamento.

    Quello che voglio fare è stampare a video una Form contenente la Label "Attendere prego" mentre effettuo le operazione presenti nel metodo Elabora().

    Ora, sto facendo casino con la sintassi ok, vediamo nello specifico:

    codice:
    // Questo è il metodo che deve essere eseguito mentre la Form è visibile
    public void Elaborazione()
    {
     // Codice
    }
    
    // Delegato del metodo Elaborazione
    public delegate void Elabora_Delegate();
    
    // Qui cerco di eseguire il codice ma la sintassi è errata
    private void Esegui ((object sender, EventArgs e)
    {
     Elabora_Delegate delegato = new Elabora_Delegate(Elaborazione);
     IAsyncResult asyncResult = delegato.BeginInvoke(?,?); // I parametri non mi sono chiari
     Globale.elaborazione.Show(); // Stampa della Form
     asyncResult.AsyncWaitHandle.WaitOne();
     delegato.EndInvoke(asyncResult);
    }
    Ecco, spero di essere stato chiaro. Come AsyncCallBack e object cosa dovrei mettere? Ho controllato sul MSDN ma non mi è chiaro.

    Grazie.

  8. #8
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    allora.. premetto che non conosco questo metodo di programmazione e se fossi in te il metodo esegui lo metterei in un thread e nel thread principale (dopo lo show per intenderci) metterei un threadEsegui.Join() per attendere la sua conclusione..

  9. #9
    Così facendo:

    codice:
    Globale.elaborazione.Show();
    Elaborazione();
    La Form viene stampa senza la Label, in pratica stampa la Form ma prima di stampare la Label passa al codice di Elaborazione().

  10. #10
    Potresti usare il componente di nome BackgroundWorker che ti facilita la chiamata asincrona, la visualizzazione di un messaggio di attesa, l'eventuale cancellazione dell'operazione ecc. ecc.

    http://msdn.microsoft.com/en-us/library/ms171728(VS.80).aspx
    Saluti a tutti
    Riccardo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.