Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-04-2006, 11:04   #1
GiulioCesare
Senior Member
 
Iscritto dal: Apr 2004
Messaggi: 364
[C#] Problema Multithread

Salve ragazzi, ho un problema con la gestione di un multithread. La situazione è la seguente, siccome ho bisogno di fare una query molto grande per avere dei dati, questo blocca per alcuni instanti la grafica della mia applicazione, allora ho pensato di gestire con un altro thread, una label che durante la query, viene visualizzata informando all'utente che l'operazione è in corso. Ma purtroppo quando tento di aggiungere la label al form, mi viene segnalato questo errore: "Cross-thread operation not valid: Control accessed from a thread other than the thread it was created on".

Posto qui di seguito il codice con la speranza che qualcuno possa aiutarmi

Codice:
public void Metodo1()
{
 Thread t;
 t = new Thread(newThreadStart(Metodo2));
 t.Start();
 //Caricamento dati metodo1
 t.Abort();
}

public void Metodo2()
{
 label.Text = "Caricamento dati in corso";
   this.Controls.Add(this.label1);
}
GiulioCesare è offline   Rispondi citando il messaggio o parte di esso
Old 18-04-2006, 11:45   #2
Riordian
Senior Member
 
L'Avatar di Riordian
 
Iscritto dal: Mar 2006
Città: Genova
Messaggi: 2457
perchè usi un thread per fare ciò? Hai bisogno di utilizzare l'applicativo durante il caricamento?
Se ti serve solo per informare l'utente penso che non sia necessario usarlo.
io cambiavo il puntatore del mouse e lo facevo diventare clessidra fino a che non finivo il caricamento (questo in visualc). Puoi fare una cosa simile anche te senza usare un thread.

Io farei una label con il testo che ti serve, la setti visible prima di iniziare il caricamente e poi invisible una volta finito, cmq penso che il tuo problema dipenda dal fatto che il secondo thread cerca di accedere a qualche cosa che è utilizzata dal primo.
Nel multithread l'interazione tra i vari thread deve essere gestita in maniera molto accurata
__________________
tag XBOX live Aldair74
Nick PSNRiordian
Affari conclusi con: Anf3t4m1n Krocca magomagnani amoredipippa mone_82 raszagale bizzy89 Andrew_db

Ultima modifica di Riordian : 18-04-2006 alle 11:55.
Riordian è offline   Rispondi citando il messaggio o parte di esso
Old 18-04-2006, 12:10   #3
GiulioCesare
Senior Member
 
Iscritto dal: Apr 2004
Messaggi: 364
Se uso tutto nello stesso thread, succede quello che ho detto prima.
Ovvero la form si blocca, e tutti i suoi vari componenti non vengono visualizzati
GiulioCesare è offline   Rispondi citando il messaggio o parte di esso
Old 18-04-2006, 12:33   #4
Riordian
Senior Member
 
L'Avatar di Riordian
 
Iscritto dal: Mar 2006
Città: Genova
Messaggi: 2457
Quote:
Originariamente inviato da GiulioCesare
Se uso tutto nello stesso thread, succede quello che ho detto prima.
Ovvero la form si blocca, e tutti i suoi vari componenti non vengono visualizzati
Mmhh Penso che se la label la fai apparire prima dell'inizio del caricamento Ok che la form si blocca però l'utente dovrebbe riuscire a vederla, cmq non puoi cambiare il puntatore del mouse e fare apparire una clessidra mentre stai caricando? Oltretutto è il comportamento standard di Windows.
Non se che suggerirti sui thread perchè con c# non ho ancora avuto il piacere di utilizzarli, quindi non conosco i metodi che le varie classi offrono, cmq io cercherei una soluzione alternativa.
Tra l'altro ho provato proprio in questo momento ad inserire una labal e mi funziona correttamente senza usare il multithread.
__________________
tag XBOX live Aldair74
Nick PSNRiordian
Affari conclusi con: Anf3t4m1n Krocca magomagnani amoredipippa mone_82 raszagale bizzy89 Andrew_db
Riordian è offline   Rispondi citando il messaggio o parte di esso
Old 18-04-2006, 12:44   #5
GiulioCesare
Senior Member
 
Iscritto dal: Apr 2004
Messaggi: 364
Il problema è che andando tutta l'applicazione del form in stato di stallo, tutti i suoi componenti non vengono visualizzati.
Per quanto riguarda mettere il puntatore come clessidra, potrebbe essere un'idea ma non rende molto intuitivo, che l'applicazione sta lavorando
GiulioCesare è offline   Rispondi citando il messaggio o parte di esso
Old 18-04-2006, 12:51   #6
Riordian
Senior Member
 
L'Avatar di Riordian
 
Iscritto dal: Mar 2006
Città: Genova
Messaggi: 2457
Quote:
Originariamente inviato da GiulioCesare
Il problema è che andando tutta l'applicazione del form in stato di stallo, tutti i suoi componenti non vengono visualizzati.
Boh, da me si comporta in maniera diversa, forse perchè il tempo di load è minimo, si comporta così quando debaggo ma in release no.

Quote:
Per quanto riguarda mettere il puntatore come clessidra, potrebbe essere un'idea ma non rende molto intuitivo, che l'applicazione sta lavorando
Su questo non sono molto d'accordo, se l'applicativo è sotto Windows secondo me è la cosa più intuitiva che ci sia.
__________________
tag XBOX live Aldair74
Nick PSNRiordian
Affari conclusi con: Anf3t4m1n Krocca magomagnani amoredipippa mone_82 raszagale bizzy89 Andrew_db
Riordian è offline   Rispondi citando il messaggio o parte di esso
Old 18-04-2006, 13:51   #7
GiulioCesare
Senior Member
 
Iscritto dal: Apr 2004
Messaggi: 364
Sul fatto che il form si blocchi, penso che dipenda proprio dalla pesantezza del mio metodo.
Per quanto riguarda il puntatore trasformato in clessidra, purtroppo queste scelte non dipendono da me
GiulioCesare è offline   Rispondi citando il messaggio o parte di esso
Old 18-04-2006, 13:55   #8
Einstein
Senior Member
 
L'Avatar di Einstein
 
Iscritto dal: Jan 2000
Città: Provincia di Parma
Messaggi: 724
Prova così (lo faccio al volo, quindi non sarà completamente affidabile... ):

Codice:
private void ShowMessageStatus(string message)
{
    lblMessage.Text = message;
}

private void LoadData()
{
    ShowMessageStatusDelegate showMsg = new ShowMessageStatusDelegate(ShowMessageStatus);
    this.Invoke(showMsg, new object[] {"Inizio caricamento dati..."});

    // algoritmo di caricamento dati

    this.Invoke(showMsg, new object[] {"Fine caricamento dati..."})
}

private delegate void LoadDataDelegate();
private delegate void ShowMessageStatusDelegate(string message);

private void Metodo1()
{
    LoadDataDelegate myWorker = new LoadDataDelegate(LoadData);
    myWorker.BeginInvoke(null, null);
}
E' sicuramente migliorabile, ma potrebbe essere un inizio.
Ti consiglio anche di dare un'occhiata a questo ottimo articolo sull'argomento: http://msdn.microsoft.com/library/de...ms06112002.asp

Ciao
__________________
My Pc: Case Enermax Chakra - PSU Corsair HX520 - Gigabyte P35-DS3R - Core2 Duo E6550 - 6 Gb RAM Geil PC800 - 2x WD Caviar SE 320Gb (Raid1) - Xfx GeForce 8600Gt - Master Pioneer DVR111D - Samsung SM T220 - S.O. Windows 7 Ultimate x64 SP1
My blog: http://blogs.ugidotnet.org/alby

Ultima modifica di Einstein : 18-04-2006 alle 19:32.
Einstein è offline   Rispondi citando il messaggio o parte di esso
Old 18-04-2006, 16:39   #9
GiulioCesare
Senior Member
 
Iscritto dal: Apr 2004
Messaggi: 364
Purtroppo anche gestendo un altro thread in questa maniera, il problema rimane. Quando la query è in esecuzione, ogni thread che parte da questa applicazione va in stato di stallo, e quindi tutti i suoi oggetti non vengono visualizzati, compresa anche la freccia del mouse, che in quel momento risulta bloccata. Possibile che non ci sia modo per gestire questa cosa?
GiulioCesare è offline   Rispondi citando il messaggio o parte di esso
Old 18-04-2006, 19:44   #10
Einstein
Senior Member
 
L'Avatar di Einstein
 
Iscritto dal: Jan 2000
Città: Provincia di Parma
Messaggi: 724
L'accesso ai dati (quello che nel mio esempio è la funzione LoadData()) deve avvenire nel thread secondario, quindi non dovresti avere problemi di stallo dell'applicazione. E' molto strano...
Se usi il .NET Framework 2.0, potresti anche utilizzare gli asynchronous commands di ADO.NET, di cui puoi trovare un esempio qui:

http://msdn.microsoft.com/library/de...tml/async2.asp

Ciao
__________________
My Pc: Case Enermax Chakra - PSU Corsair HX520 - Gigabyte P35-DS3R - Core2 Duo E6550 - 6 Gb RAM Geil PC800 - 2x WD Caviar SE 320Gb (Raid1) - Xfx GeForce 8600Gt - Master Pioneer DVR111D - Samsung SM T220 - S.O. Windows 7 Ultimate x64 SP1
My blog: http://blogs.ugidotnet.org/alby
Einstein è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Airbus realizzerà altri 229 satel...
Arianespace lancerà altri satelli...
Eutelsat ha annunciato di aver affidato ...
PLD Space ha annunciato il nuovo razzo s...
CMF Clip Pro, tanta autonomia e design u...
Tre leggende del rally sbarcano in Asset...
iPhone 18 Pro Max, il chip A20 Pro mostr...
Samsung porterà il Privacy Displa...
WINDTRE BUSINESS trasforma la rete mobil...
Anthropic ammette un quarto caso di acce...
Mazda CX-6e, il primo test drive: quando...
La serie HONOR Magic 9 arriva a fine set...
Anker MagGo Power Bank 2 Pro arriva in I...
iRobot rilancia con Roomba Duo, il proto...
#linux su IRC è tornato dopo anni di sil...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 20:45.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v