C# 冬虫夏草冻结/无反应
我有一个流量交换网站,我想用C#winform和Awesomium 1.7.5将其转换成windows应用程序。 基本设置已就绪,但Awesomium存在问题。 在访问了一些网站之后,速度会减慢,并且完全冻结(没有响应) 所以C# 冬虫夏草冻结/无反应,c#,winforms,awesomium,C#,Winforms,Awesomium,我有一个流量交换网站,我想用C#winform和Awesomium 1.7.5将其转换成windows应用程序。 基本设置已就绪,但Awesomium存在问题。 在访问了一些网站之后,速度会减慢,并且完全冻结(没有响应) 所以LoadUrl()这是一个循环。当应用程序启动并加载到流量交换网站时,有点慢,但它可以工作,您可以在不冻结的情况下从一个页面转到另一个页面,但当交换在运行时(LoadUrl()),5分钟后,应用程序就死了。 我整天都在寻找解决方案,结果一无所获,找不到解决问题的方法。不应在
LoadUrl()
这是一个循环。当应用程序启动并加载到流量交换网站时,有点慢,但它可以工作,您可以在不冻结的情况下从一个页面转到另一个页面,但当交换在运行时(LoadUrl()
),5分钟后,应用程序就死了。
我整天都在寻找解决方案,结果一无所获,找不到解决问题的方法。不应在每次循环时重新创建计时器。发生的情况是,每次循环时都要创建多个事件处理程序。在构造函数中创建一次处理程序并在按钮单击例程中启动计时器是正确的方法
可以在循环内更改间隔,但避免在那里添加另一个Start()方法调用 为什么每次计时器循环时都要重新创建它?您只需在窗体的构造函数中创建一次,计时器就会自动重置。谢谢您,代码更新。您仍在一次又一次地启动它,以及重置间隔。只需在按钮中执行一次,然后根本不更改循环中的计时器,或者再次启动它(它已经在运行)。我需要重置间隔,因为每个网站都有不同的值。我更新了我的源代码,从那以后,应用程序运行得很好。我将其作为答案发布,这样它就不会停留在未应答的队列中。就是这样,应用程序现在运行得很好。非常感谢。
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();
}