我在寫一個C#程序來顯示我的PS3中CPU/GPU的溫度。 有一個連接按鈕。這工作真的很好,它顯示了溫度。來自我的PS3的CPU/GPU。C#變量不會更新
現在我已經實現了一個「刷新」按鈕,啓動一個定時器所有X秒要做到這一點:
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();
}
所以這個「get_psdata」僅適用於第一次,當我按下連接按鈕。 (該連接按鈕直接啓動「get_psdate」功能,同時刷新按鈕確實有些不同,比如你可以在後面看到...)
這裏是運行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;
}
}
爲了測試,我添加了一個Messagebox.Show到「get_psdata」功能,看它是否運行所有X秒......是它,這是我的計時器:
//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();
}
而這正是啓動我的計時器:
//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!");
}
}
所以我敢肯定,代碼將運行所有X秒,但標籤的時候我打的連接按鈕只更新,但如果我用B_set按鈕連接後啓動計數器。
「get_psdata」中的變量未顯示更新後的值。他們只是顯示第一個「Get」的結果。 他們爲什麼不顯示最新結果?
您能否縮小您的問題範圍並突出顯示您的代碼中有問題的部分?感謝和問候, –
@AlexBell Okey所以我的問題是:如何從get_psdata函數更新我的變量?它只是不會工作。 我不知道問題在哪裏,這就是爲什麼我添加了很多代碼。失敗可能是每個...(?) – SnipeLike
不知道這是WPF還是WinForms,但我的直覺是,這個問題可能與嘗試更新不同線程(計時器正在使用的)中的標籤有關。您可以嘗試將更新分派給主線程。 – vesan