2014-12-18 4 views
5

अपडेट नहीं करेगा मैं अपने 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" से वेरिएबल्स अद्यतन मूल्य नहीं दिखा रहे हैं। वे सिर्फ पहले "गेट" से परिणाम दिखाते हैं। वे नवीनतम परिणाम क्यों नहीं दिखा रहे हैं?

+2

क्या आप कृपया अपना प्रश्न संकीर्ण कर सकते हैं और अपने कोड का केवल एक समस्याग्रस्त हिस्सा हाइलाइट कर सकते हैं? धन्यवाद और सम्मान, –

+0

@AlexBell Okey तो मेरा सवाल है: मैं get_psdata फ़ंक्शन से अपने चर को कैसे अपडेट कर सकता हूं? यह सिर्फ काम नहीं करेगा। मुझे नहीं पता कि समस्या कहां है, इसलिए मैंने बहुत सारे कोड जोड़े। विफलता हरवेयर हो सकती है ... (?) – SnipeLike

+1

यह सुनिश्चित नहीं है कि यह WPF या WinForms है, लेकिन मेरा हल यह है कि समस्या एक अलग थ्रेड से लेबल को अद्यतन करने का प्रयास करने के साथ हो सकती है (जो टाइमर उपयोग कर रहा है)। आप मुख्य धागे के अपडेट को प्रेषित करने का प्रयास कर सकते हैं। – vesan

उत्तर

2

यदि मैं एक ताजा Winforms स्क्रीन में अपने कोड का उपयोग करता हूं, तो सभी अच्छी तरह से काम करते हैं। हालांकि मैंने get_psdata के लिए निम्नलिखित कार्यान्वयन का उपयोग किया था।

public void get_psdata() 
{ 
    var rnd = new Random(); 

    //Set data into Var 
    L_cputemp_show.Text = rnd.Next().ToString(); 
    L_gputemp_show.Text = rnd.Next().ToString(); 
    L_firmware_show.Text = rnd.Next().ToString(); 
    L_type_show.Text = rnd.Next().ToString(); 

    //Update Label 
    L_cputemp_show.Refresh(); 
} 

1 सेकंड के अंतराल के साथ, यह मुझे हर सेकेंड स्क्रीन पर नए मान देता है। क्या आप इस कोड को आजमा सकते हैं? यदि यह अच्छी तरह से काम करता है, तो समस्या PS3 ऑब्जेक्ट के साथ है जो शायद इसके आंतरिक को रीफ्रेश नहीं करती है?

+0

ओह मैंने अपना कोड आपके उदाहरण में बदल दिया और पाठ सभी एक्स सेकेंड को रीफ्रेश करता है ... धन्यवाद। लेकिन अब मैं अपने कोड के साथ काम करने के लिए क्या कर सकता हूं? – SnipeLike

+0

ऐसा लगता है कि "PS3.GetTemperatureCELL" इसे चलाने से cputemp var को अद्यतन नहीं करता है? – SnipeLike

+1

तो ऐसा लगता है।क्या PS3 ऑब्जेक्ट के बारे में अधिक जानकारी है? प्रकार? प्रलेखन? –

संबंधित मुद्दे