Torna indietro   Hardware Upgrade Forum > Software > Programmazione

NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT
Nelle ultime settimane abbiamo provato tre delle proposte top di gamma di NZXT nelle categorie case, dissipatori e ventole. Rispettivamente, parliamo dell'H9 Flow RGB+, Kraken Elite 420 e F140X. Si tratta, chiaramente, di prodotti di fascia alta che si rivolgono agli utenti DIY che desiderano il massimo per la propria build. Tuttavia, mentre i primi due dispositivi mantengono questa direzione, le ventole purtroppo hanno mostrato qualche tallone d'Achille di troppo
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN è il primo monitor gaming con pannello QD-OLED Gen 5 a layout RGB Stripe Pixel e 360 Hz su 34 pollici: lo abbiamo misurato con sonde colorimetriche e NVIDIA LDAT. Ecco tutti i dati
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Nothing Phone (4a) Pro cambia pelle: l'alluminio unibody sostituisce la trasparenza integrale, portando una solidità inedita. Sotto il cofano troviamo uno Snapdragon 7 Gen 4 che spinge forte, mentre il display è quasi da top dig amma. Con un teleobiettivo 3.5x e la Glyph Matrix evoluta, è la prova di maturità di Carl Pei. C'è qualche compromesso, ma a 499EUR la sostanza hardware e la sua unicità lo rendono un buon "flagship killer" in salsa 2026
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


NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abb...
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz ASUS ROG Swift OLED PG34WCDN recensione: il prim...
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico Recensione Nothing Phone (4a) Pro: finalmente in...
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro WoW: Midnight, Blizzard mette il primo, storico ...
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
CAS Space ha lanciato per la prima volta...
Qualcomm boccia Samsung: i futuri chip S...
Il razzo spaziale cinese Tianlong-3 di S...
Samsung cambia i piani: aumenta la produ...
TSMC non si ferma più: fatturato ...
Xiaomi porta in Italia il nuovo Redmi A7...
Mercato smartphone: Q1 2026 positivo (+1...
YouTube punta sull'AI: gli utenti potran...
Il prossimo chip a 2 nm di Samsung punte...
Due smartphone REDMAGIC sono stati rimos...
La beta della One UI 8.5 è ora di...
Addio al Pannello di Controllo di Window...
Il chip N1 di NVIDIA per i laptop del fu...
YouTube Premium costerà di pi&ugr...
I nuovi Samsung Galaxy A57 5G e A37 5G a...
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: 23:26.


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