2015-04-22 94 views
1

我有一個流量交換網站,我想轉換成一個Windows應用程序使用C#winform與Awesomium 1.7.5。 基本設置已準備就緒,但Awesomium存在問題。 訪問過幾個網站後,速度變慢,完全凍結(Not Responding)。Awesomium凍結/沒有響應

  public Form1() 
     { 
      InitializeComponent(); 

      Text = "Traffic Exchange"; 
      WindowState = FormWindowState.Maximized; 
      timer1 = new System.Windows.Forms.Timer(); 
      timer1.Tick += new EventHandler(timer1_Tick); 
      int user_id = Properties.Settings.Default.user_id; 
      string user_id_s = user_id.ToString(); 
      toolStripLabel2.Text = user_id_s; 

      if (Properties.Settings.Default.user_id == 0) 
      { 
       toolStripLabel3.Visible = true; 
       toolStripButton3.Visible = false; 
      } 
      else 
      { 
       toolStripButton3.Visible = true; 
       toolStripLabel3.Visible = false; 
      } 
     } 

     private void toolStripButton3_Click_1(object sender, EventArgs e) 
     { 
// starting the traffic traffic exchange 
      LoadUrl(); 
      StartTimer(); 
     } 


     private void LoadUrl() 
     { 
      try 
      { 
       string MyConnection2 = "*******"; 
       string Query = "select * from ****** where status = 1 AND credits > 5 ORDER BY rand() LIMIT 1"; 
       MySqlConnection MyConn2 = new MySqlConnection(MyConnection2); 
       MySqlCommand MyCommand2 = new MySqlCommand(Query, MyConn2); 
       MyConn2.Open(); 
       using (MySqlDataReader DR = MyCommand2.ExecuteReader()) 
       { 
        while (DR.Read()) 
        { 
         string WebURL = Convert.ToString(DR.GetValue(*)); 
         string WebSurfSec = Convert.ToString(DR.GetValue(*)); 


         int result = Convert.ToInt32(WebSurfSec); 
         int sec_to_mil = result * 1000; 
         toolStripLabel5.Text = WebSurfSec; 

         //toolStripStatusLabel2.Text = result.ToString(); 
         //toolStripStatusLabel3.Text = sec_to_mil.ToString(); 
         webControl3.Source = new Uri(WebURL); 
         toolStripTextBox1.Text = WebURL; 
         toolStripLabel6.Text = toolStripTextBox1.Text; 


         timer1.Interval = sec_to_mil; // in miliseconds 

        } 
       } 
       MyConn2.Close(); 

       // WebCore.ReleaseMemory(); 

      // webControl3.Update(); 
      // Thread.Sleep(500); 



      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 

     } 
     private void timer1_Tick(object sender, EventArgs e) 
     { 
      LoadUrl(); 
     } 
     private void StartTimer() 
     { 
      timer1.Start(); 
     } 

所以LoadUrl()這是一個循環。當應用程序啓動加載流量交換的網站,有點慢但它的工作原理,你可以去形成一個頁面到另一個沒有凍結,但當交換是在行動(LoadUrl())5分鐘後應用程序已死亡。 我一直在尋找解決方案整天,並沒有結果,沒有找到解決方案的問題。

+1

爲什麼每次循環時重新創建計時器?您只需要在表單的構造函數中創建一次,計時器就會自動重置。 –

+0

謝謝你,代碼更新。 – rgerculy

+1

您仍然一遍又一遍地重新啓動它,並重置間隔。只需在按鈕中執行一次,然後根本不要更改循環中的定時器,或者再次啓動它(它已經在運行)。 –

回答

2

每次循環時都不應該重新創建定時器。發生什麼事是你每次循環都創建多個事件處理程序。在構造函數中創建處理程序一次,並在按鈕點擊例程中啓動計時器是正確的方法。

您可以更改循環內的時間間隔,但避免在其中添加另一個Start()方法調用。

+0

就是這樣,現在應用程序運行非常好。謝謝。 – rgerculy