2015-04-22 2 views
1

У меня есть сайт обмена трафиком, и я хочу преобразовать его в приложение Windows, используя C# winform с Awesomium 1.7.5. Базовая установка готова, но есть проблема с Awesomium. После посещения нескольких сайтов замедляется и полностью замораживается (не реагирует).Awesomium freezes/not отвечает

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

So LoadUrl() Это петля. Когда приложение запускается на веб-сайте обмена трафиком, немного медленнее, но он работает, и вы можете перейти от страницы к другой без замораживания, но когда обмен в действии (LoadUrl()) через 5 минут приложение будет мертвым. Я искал решение весь день и ничего не получал, не смог найти решение проблемы.

+1

Почему вы воссоздаете таймер каждый раз, когда он петли? Вам нужно только создать его один раз в конструкторе для формы, таймер автоматически сбрасывается. –

+0

Спасибо за это, обновим код. – rgerculy

+1

Вы все еще начинаете его снова и снова, а также сбрасываете интервал. Просто сделайте это один раз в кнопке, затем не изменяйте таймер в цикле вообще или не запустите его снова (его уже запущено). –

ответ

2

Таймер не должен воссоздаваться каждый раз, когда вы петляете. Случается, что вы каждый раз создаете несколько обработчиков событий. Создание обработчика один раз в конструкторе и запуск таймера в рутине кнопки - это правильный путь.

Вы можете изменить интервал внутри цикла, но не добавлять туда другого метода вызова Start().

+0

Вот и все, приложение работает очень хорошо. Спасибо. – rgerculy

Смежные вопросы