Sto scrivendo un programma C# per visualizzare la temperatura della CPU/GPU dalla mia PS3. C'è un pulsante di connessione. Funziona davvero bene e mi mostra la Temp. dalla mia CPU/GPU della mia PS3.La variabile C# non verrà aggiornata
Ora ho implementato un pulsante, che avvia un timer per ogni x secondi per farlo "refresh":
public void get_psdata()
{
//Get data from PS3
cputemp = PS3.GetTemperatureCELL();
gputemp = PS3.GetTemperatureRSX();
psversion = PS3.GetFirmwareVersion();
psversiontype = PS3.GetFirmwareType();
//Set data into Var
L_cputemp_show.Text = cputemp;
L_gputemp_show.Text = gputemp;
L_firmware_show.Text = psversion;
L_type_show.Text = psversiontype;
//Update Label
L_cputemp_show.Refresh();
}
Quindi questo "get_psdata" funziona solo sulla prima volta, quando si preme il pulsante di connessione. (Il pulsante di connessione inizia direttamente la funzione "get_psdate", mentre il pulsante di aggiornamento fa un po 'diverso, come è possibile vedere in seguito ...)
ecco il codice per eseguire il get_psdata:
//B_connect, Connect Button
private void b_connect_Click(object sender, EventArgs e)
{
//Connect CCAPI to PS3 if Button clicked
PS3.ConnectTarget(psip);
//Check Connection
if (PS3.SUCCESS(PS3.ConnectTarget(psip)))
{
//Show Status
MessageBox.Show("Connected to: " + psip + "!");
this.L_status_show.Text = "Connected!"; L_status_show.ForeColor = System.Drawing.Color.Green;
//Call Function
get_psdata();
}
else
{
//Show Status
MessageBox.Show("Failed to Connect to: " + psip + "!");
this.L_status_show.Text = "Not Connected!"; L_status_show.ForeColor = System.Drawing.Color.Red;
}
}
per il test, ho aggiunto un Messagebox.Show alla funzione "get_psdata" per vedere se funziona tutti i secondi x ... Sì lo fa e questo è il mio timer:
//Function to set refresh delay
public void refresh_delay()
{
MessageBox.Show("Delay set to " + refresh_int + " Seconds!");
refresh_int = refresh_int * 1000; //Change to Miliseconds
init_timer();
}
//Timer
public Timer timer1;
public void init_timer()
{
timer1 = new Timer();
timer1.Tick += new EventHandler(timer1_Tick);
timer1.Interval = refresh_int; // in miliseconds
timer1.Start();
}
public void timer1_Tick(object sender, EventArgs e)
{
get_psdata();
}
e questo è ciò che si avvia il mio timer:
//B_set, Set refresh time button
private void B_set_Click(object sender, EventArgs e)
{
//Check refresh Value
refresh_string = TB_refresh.Text;
//Check empty
if (refresh_string != "")
{
//Check minimum
refresh_int = Convert.ToInt32(TB_refresh.Text);
if (refresh_int < 5)
{
DialogResult confirm = MessageBox.Show("This is not the delay you are looking for! \r (I recommend to set it bigger then 5) \r Continue with " + refresh_int + " Seconds?", "Realy dude?", MessageBoxButtons.YesNo);
if (confirm == DialogResult.Yes)
{
//Call Function
refresh_delay();
}
}
else
{
//Call Function
refresh_delay();
}
}
else
{
MessageBox.Show("Please set refresh delay!");
}
}
quindi sono sicuro che il codice verrà eseguito tutti i secondi x ma dell'etichetta vengono aggiornate solo quando premo il pulsante di connessione, ma non se avviare il contatore dopo il collegamento con il tasto b_SET.
Le variabili da "get_psdata" non mostrano il valore aggiornato. Mostrano solo il risultato del primo "Get". Perché non mostrano l'ultimo risultato?
Potresti per favore restringere la tua domanda ed evidenziare solo una parte problematica del tuo codice? Grazie e saluti, –
@AlexBell Okey quindi la mia domanda è: come posso aggiornare le mie variabili dalla funzione get_psdata? Semplicemente non funzionerà. Non so dove sia il problema, ecco perché ho aggiunto un sacco di codice. L'errore potrebbe essere tutto ... (?) – SnipeLike
Non sono sicuro se si tratta di WPF o WinForms, ma la mia impressione è che il problema potrebbe essere con il tentativo di aggiornare le etichette da un thread diverso (che utilizza il timer). Puoi provare a inviare gli aggiornamenti al thread principale. – vesan