2014-12-18 20 views
5

Tôi đang viết Chương trình C# để hiển thị Nhiệt độ CPU/GPU từ PS3 của tôi. Có nút kết nối. Điều này hoạt động thực sự tốt và nó cho tôi thấy Temp. từ CPU/GPU của PS3.C# Biến sẽ không cập nhật

Bây giờ tôi đã thực hiện một "refresh" nút, mà bắt đầu một bộ đếm thời gian cho tất cả Giây x để làm điều này:

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(); 
     } 

Vì vậy, đây "get_psdata" chỉ hoạt động trên lần đầu tiên, khi tôi bấm nút kết nối. (Các nút kết nối bắt đầu trực tiếp "get_psdate" chức năng, trong khi nút refresh không một chút khác nhau, như bạn có thể nhìn thấy sau ...)

Đây là đoạn mã để chạy 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; 
      } 
     } 

để thử nghiệm, tôi đã thêm một Messagebox.Show đến chức năng "get_psdata" để xem nếu nó chạy tất cả Giây x ... có nó và đây là bộ đếm thời gian của tôi:

 //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(); 
     } 

và đây là những gì bắt đầu bộ hẹn giờ của tôi:

//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!"); 
     } 
    } 

Vì vậy, tôi chắc chắn mã sẽ chạy hết x giây nhưng nhãn chỉ được cập nhật khi tôi nhấn nút kết nối, nhưng không nếu tôi bắt đầu bộ đếm sau khi kết nối với nút B_set.

Các biến từ "get_psdata" không hiển thị giá trị được cập nhật. Họ chỉ hiển thị kết quả từ lần đầu tiên "Nhận". Tại sao chúng không hiển thị kết quả mới nhất?

+2

Bạn có thể thu hẹp câu hỏi của mình và chỉ đánh dấu một phần có vấn đề trong mã của bạn không? Cảm ơn và kính trọng, –

+0

@AlexBell Okey vì vậy câu hỏi của tôi là: Làm cách nào để cập nhật Biến của tôi từ hàm get_psdata? Nó sẽ không hoạt động. Tôi không biết vấn đề ở đâu, đó là lý do tại sao tôi đã thêm rất nhiều mã. Sự thất bại có thể là phần mềm ... (?) – SnipeLike

+1

Không chắc chắn nếu điều này là WPF hay WinForms, nhưng linh cảm của tôi là vấn đề có thể là với cố gắng để cập nhật các nhãn từ một chủ đề khác nhau (mà bộ đếm thời gian được sử dụng). Bạn có thể thử gửi các bản cập nhật cho chuỗi chính. – vesan

Trả lời

2

Nếu tôi sử dụng mã của bạn trong màn hình winforms mới, tất cả đều hoạt động tốt. Tuy nhiên tôi đã sử dụng thực hiện sau đây cho 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(); 
} 

Với khoảng thời gian 1 giây, điều này mang lại cho tôi giá trị mới trên màn hình mỗi giây. Bạn có thể thử mã này không? Nếu điều này hoạt động tốt, thì vấn đề là với đối tượng PS3 không làm mới nội bộ của nó?

+0

Ồ, tôi đã thay đổi mã của tôi thành ví dụ của bạn và văn bản làm mới tất cả x giây ... Cảm ơn bạn. Nhưng tôi có thể làm gì bây giờ để làm cho nó hoạt động với mã của tôi? – SnipeLike

+0

Có vẻ như "PS3.GetTemperatureCELL" không cập nhật cputemp var bằng cách chạy nó? – SnipeLike

+1

Vì vậy, có vẻ như vậy.Có thêm thông tin về đối tượng PS3 không? Kiểu? Tài liệu? –

Các vấn đề liên quan