venerdì 28 marzo 2014

Chiamate cross thread su controlli winform - C#

Se si utilizzano thread durante lo sviluppo di applicazioni c#, si può avere la necessità di agire direttamente su controlli winform, ad esempio impostare il contenuto di una casella di testo in una finestra.
Se però si tenta di agire direttamente sul controllo, ad esempio da un oggetto backgroundWorker (che altro non è che un thread), a runtime viene generata una eccezione e il debugger si lamenta per una chiamata cross-thread non correttamente gestita.
Per fortuna la soluzione è alquanto semplice, racchiusa in poche righe di codice. Ad esempio, nel codice eseguito dal backgroundWorker, basterà inserire una chiamata invoke sul controllo con il quale intendiamo interagire.
Dato una textbox chiamata txt_esempio, il codice quindi sarà:

try
{
    txt_esempio.Invoke((MethodInvoker)delegate() { 
        txt_esempio.Text = "Testo modificato da backgroundWorker"; 
    });
}
catch (InvalidOperationException ioe) { }

1 commento:

QuickBooks Helpline Number ha detto...

QuickBooks is used to complete the work related to your accounts like managing salaries, taxes, returns, attendance, etc. You can also share your accountant’s file to your clients, but it is showing errors. You can fix this problem by calling Quickbooks Contact Number. It is available to attend your issue 24/7 hours and provide your better assistance on call. You can also fix issues by updating your QuickBooks software with a current version. Prepare and create a new accountant’s file again and share it with your client. If it is shared then, you have removed this problem.
Read More : QuickBooks is Unable to Display the Accountant's Changes
Use Payment and Adding Items and Categories in GoPayment QuickBooks
How to resolve QuickBooks error 6000
How to Fix Quickbooks Update Error Code 12007
How to void a check in QuickBooks
How to Manage QuickBooks Bill Online
QuickBooks Unable to Connect to Remote Server