अपडेट नहीं करेगा मैं अपने PS3 से CPU/GPU का तापमान प्रदर्शित करने के लिए एक सी # प्रोग्राम लिख रहा हूं। एक कनेक्ट बटन है। यह वास्तव में अच्छा काम करता है और यह मुझे Temp दिखाता है। मेरे पीएस 3 के सीपीयू/जीपीयू से।सी # परिवर्तनीय
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;
}
}
परीक्षण के लिए, मैं "get_psdata" समारोह के लिए एक Messagebox.Show कहा कि यदि यह सब एक्स सेकंड चलाता है को देखने के लिए ... हाँ यह करता है और यह मेरा टाइमर है:
//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!");
}
}
तो मुझे यकीन है कि कोड सभी एक्स सेकंड चलेंगे हूँ लेकिन लेबल की एकमात्र अपडेट किया जाता है जब मैं कनेक्ट करें बटन मारा, लेकिन नहीं अगर मैं B_set बटन के साथ जोड़ने के बाद काउंटर शुरू करते हैं।
"get_psdata" से वेरिएबल्स अद्यतन मूल्य नहीं दिखा रहे हैं। वे सिर्फ पहले "गेट" से परिणाम दिखाते हैं। वे नवीनतम परिणाम क्यों नहीं दिखा रहे हैं?
क्या आप कृपया अपना प्रश्न संकीर्ण कर सकते हैं और अपने कोड का केवल एक समस्याग्रस्त हिस्सा हाइलाइट कर सकते हैं? धन्यवाद और सम्मान, –
@AlexBell Okey तो मेरा सवाल है: मैं get_psdata फ़ंक्शन से अपने चर को कैसे अपडेट कर सकता हूं? यह सिर्फ काम नहीं करेगा। मुझे नहीं पता कि समस्या कहां है, इसलिए मैंने बहुत सारे कोड जोड़े। विफलता हरवेयर हो सकती है ... (?) – SnipeLike
यह सुनिश्चित नहीं है कि यह WPF या WinForms है, लेकिन मेरा हल यह है कि समस्या एक अलग थ्रेड से लेबल को अद्यतन करने का प्रयास करने के साथ हो सकती है (जो टाइमर उपयोग कर रहा है)। आप मुख्य धागे के अपडेट को प्रेषित करने का प्रयास कर सकते हैं। – vesan