Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno
Con la quattordicesima generazione Lenovo ridisegna il suo ThinkPad più iconico attorno al nuovo Space Frame e ai processori Intel Core Ultra Series 3. Resta sotto 1Kg, è molto più semplice da riparare e si rivolge al professionista che lavora in mobilità, con un prezzo da prodotto di vertice.
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro
Le Jabra Evolve3 85 non sono semplicemente cuffie Bluetooth con cancellazione del rumore. Sono un dispositivo professionale pensato per chi trascorre gran parte della giornata in riunione, al telefono o davanti a un assistente basato sull'intelligenza artificiale
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
Abbiamo provato MSI PRO MAX EDGE AI+, un mini-PC professionale progettato per eseguire modelli di intelligenza artificiale in locale, senza dipendere dal cloud. Il sistema abbina il processore AMD Ryzen AI Max+ 395, 128 GB di memoria unificata e un telaio in alluminio da appena 4 litri, con l'obiettivo di offrire capacità di elaborazione elevate in un formato compatto.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-04-2006, 12: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, 12: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 12:55.
Riordian è offline   Rispondi citando il messaggio o parte di esso
Old 18-04-2006, 13: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, 13: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, 13: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, 13: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, 14: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, 14: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 20:32.
Einstein è offline   Rispondi citando il messaggio o parte di esso
Old 18-04-2006, 17: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, 20: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


Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno Lenovo ThinkPad X1 Carbon Gen 14: il business ul...
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro Jabra Evolve3 85: le cuffie sia per l'intratteni...
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB...
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista Recensione vivo X500 Pro Max: la fotografia mobi...
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Il CEO di NVIDIA Jensen Huang ammette la...
Moon Base: la NASA amplia contratti e mi...
L'italiana Avio fa un passo indietro sul...
SpaceX Starship: Flight 15 punta al prim...
Smartbox colpita da un attacco hacker: e...
Un'IA risolve in 3 giorni un enigma che ...
TOP 10 Amazon weekend: tornano gli Smart...
ReactOS introduce il supporto USB 3.0: i...
TECLAST M60 a soli 159€ su Amazon: table...
Haier da 65 pollici a partire da 397€ su...
Google Pixel 11, Pro e Pro XL in offerta...
Memorie, inversione di tendenza: i PC co...
Rubati 6 pallet di hardware NVIDIA da 11...
Addio ai limiti del silicio? Ecco il dia...
Windows 11 27H2 sarà un 'cambio completo...
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: 05:25.


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