c# timer not stopping - c#

Timer starts with button1;
private void button1_Click(object sender, EventArgs e)
{
timer1.Interval = 1;
timer1.Enabled = true;
}
Timer function should work until i click STOP button
private void timer1_Tick(object sender, EventArgs e)
{
Keyboard.KeyDown(Keys.D9);
Thread.Sleep(1);
Keyboard.KeyUp(Keys.D9);
Thread.Sleep(1);
Keyboard.KeyDown(Keys.D1);
Thread.Sleep(1);
Keyboard.KeyUp(Keys.D1);
}
Button2 is "stop" button but timer is not stopping until i close application , sometimes is stopping if i click more than five or ten but sometimes it never stops
private void button2_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
MessageBox.Show("timer stop");
}

Related

How do I refresh a form with a timer?

I use this code to refresh my from it work good for one time after that the timer stopped with me
private void Button1_Click(object sender, EventArgs e)
{
System.Windows.Forms.Timer timer1 = new System.Windows.Forms.Timer();
timer1.Interval = 900000;//5 minutes
timer1.Tick += new System.EventHandler(Timer1_Tick);
timer1.Start();
}
private void Timer1_Tick(object sender, EventArgs e)
{
//do whatever you want
RefreshMyForm();
}
private void RefreshMyForm()
{
this.Hide();
Graph1 graph = new Graph1();
graph.Show();
}
i don't know what i miss in this code
it hide the from and didn't open again
start refresh that what i looking form
You need to move the timer deceleration out of the button click and make it "global" to the class. Also, set it up on the Form_Load (make sure you wire up the Form_Load method to your Form_Load event.
Also, your hide logic is a bit faulty. You hide the form, then create a graph (but don't attach it to the Form) then show it. Added some comments below to help you navigate these issues.
private System.Windows.Forms.Timer timer1;
private void Form_Load(object sender, EventArgs e)
{
timer1 = new System.Windows.Forms.Timer();
timer1.Interval = 900000;//5 minutes
timer1.Tick += new System.EventHandler(Timer1_Tick);
}
private void Button1_Click(object sender, EventArgs e)
{
if (!timer1.Enabled)
timer1.Start();
}
private void Timer1_Tick(object sender, EventArgs e)
{
//do whatever you want
RefreshMyForm();
}
private void RefreshMyForm()
{
// Do your data update logic here
this.Refresh();
}

what is the way to close the form and open it again

i try to close the from and open it again with this code bout it didn't close the form i found it in the background and open another one for it
private void Graph_Load(object sender, EventArgs e)
{
System.Windows.Forms.Timer timer1 = new System.Windows.Forms.Timer();
timer1.Interval = 60000;//1 minutes
timer1.Tick += new System.EventHandler(Timer1_Tick);
timer1.Start();
}
private void Timer1_Tick(object sender, EventArgs e)
{
//do whatever you want
RefreshMyForm();
}
private void RefreshMyForm()
{
this.Close();
Graph1 graph = new Graph1();
graph.Show();
}
start refresh is what i looking for
All you have to do is to change RefreshMyForm() to Refresh(); and clear function RefreshMyForm().
private void Graph_Load(object sender, EventArgs e)
{
{
System.Windows.Forms.Timer timer1 = new System.Windows.Forms.Timer();
label1.Text = DateTime.Now.ToString("HH:mm:ss");
timer1.Interval = 60000;//1 minutes
timer1.Tick += new System.EventHandler(Timer1_Tick);
timer1.Start();
}
}
private void Timer1_Tick(object sender, EventArgs e)
{
label1.Text = DateTime.Now.ToString("HH:mm:ss");
Refresh(); // OR Invalidate(); OR Update();
}
Here label1 is simple watch to see how form refreshed every minute

How to pause the timer in c# for a while and then restart it

I'm using System.Threading.Timer timer object. I need to pause the timer inside the tick method so that I can do some stuff, and then restart the timer to start tick again.
private async void timer1_Tick(object sender, EventArgs e)
{
timer1.Stop();
timer1.Enabled = false;
if (btn7)
{
timer.Stop();
}
fetch_hashtag();
br2(); //posting in hashtages
Console.WriteLine("waiting");
while (timer1.Enabled == false)
{
Application.DoEvents();
if (webBrowser2.Url.AbsoluteUri.Contains("blank"))
timer1.Enabled = true;
}
await Task.Delay((int)TimeSpan.FromMinutes(double.Parse(textBox4.Text)).TotalMilliseconds);
timer1.Start();
}
private async void timer1_Tick(object sender, EventArgs e)
{
timer1.Enabled = false;
timer1.Stop();
timer1.Tick -= timer1_Tick;
// do some stuff
timer1.Enabled = true;
timer1.Start();
timer1.Tick += timer1_Tick;
}
I need to pause the timer inside the tick method so that I can do some
stuff, and then restart the timer to start tick again.
The Tick() event is for System.Windows.Forms.Timer, not System.Threading.Timer. At any rate, just call Stop(), do your "stuff", then call Start() again:
private async void timer1_Tick(object sender, EventArgs e)
{
timer1.Stop();
// do some stuff
timer1.Start();
}

C# button animation

i have a simple two button:
button1
button2
i want when click on button1 the button2 start a move to right,
i write this code:
private void button2_Click(object sender, EventArgs e)
{
timer1.Enabled = true;
timer1.Interval = 100;
}
private void timer1_Tick(object sender, EventArgs e)
{
button1.Left += 20;
}
private void button3_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
//timer1.Interval = 0;
}
i want when the button exit on my form border on right side,timer has stop the animation.
I think this is what you looking for:
private void button2_Click(object sender, EventArgs e)
{
timer1.Interval = 100;
//start the timer
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
button1.Left += 20;
//check position of button. When it is outside the width of form stop the timer.
if(button1.Left >= this.Width)
{
timer1.Stop();
}
}

How to use a BackgroundWorker?

I know it has 3 methods. In my program I have a method to send a message. It is often late and the program sometimes doesn't send the message at all in response to a button press. At times it is as late as 5 seconds from what I would expect and the program freezes. I want to use a BackgroundWorker to send the message as expected and allow the program to run normally at all times. I had the code for sending the message in a button handler. Now where do I put this equivalent code? I would like all of this to still be handled by a button press.
Is this the appropriate handler?
backgroundWorker1.RunWorkerAsync();
and in:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) {}
I'm going to put my code in the button handler?
And this before:
carga.progressBar1.Minimum = 0;
carga.progressBar1.Maximum = 100;
Carga is my other form where the ProgressBar is. How do I use a BackgroundWorker in this scenario?
You can update progress bar only from ProgressChanged or RunWorkerCompleted event handlers as these are synchronized with the UI thread.
The basic idea is. Thread.Sleep just simulates some work here. Replace it with your real routing call.
public Form1()
{
InitializeComponent();
backgroundWorker1.DoWork += backgroundWorker1_DoWork;
backgroundWorker1.ProgressChanged += backgroundWorker1_ProgressChanged;
backgroundWorker1.WorkerReportsProgress = true;
}
private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
for (int i = 0; i < 100; i++)
{
Thread.Sleep(1000);
backgroundWorker1.ReportProgress(i);
}
}
private void backgroundWorker1_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
I know this is a bit old, but in case another beginner is going through this, I'll share some code that covers a bit more of the basic operations, here is another example that also includes the option to cancel the process and also report to the user the status of the process. I'm going to add on top of the code given by Alex Aza in the solution above
public Form1()
{
InitializeComponent();
backgroundWorker1.DoWork += backgroundWorker1_DoWork;
backgroundWorker1.ProgressChanged += backgroundWorker1_ProgressChanged;
backgroundWorker1.RunWorkerCompleted += backgroundWorker1_RunWorkerCompleted; //Tell the user how the process went
backgroundWorker1.WorkerReportsProgress = true;
backgroundWorker1.WorkerSupportsCancellation = true; //Allow for the process to be cancelled
}
//Start Process
private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
//Cancel Process
private void button2_Click(object sender, EventArgs e)
{
//Check if background worker is doing anything and send a cancellation if it is
if (backgroundWorker1.IsBusy)
{
backgroundWorker1.CancelAsync();
}
}
private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
for (int i = 0; i < 100; i++)
{
Thread.Sleep(1000);
backgroundWorker1.ReportProgress(i);
//Check if there is a request to cancel the process
if (backgroundWorker1.CancellationPending)
{
e.Cancel = true;
backgroundWorker1.ReportProgress(0);
return;
}
}
//If the process exits the loop, ensure that progress is set to 100%
//Remember in the loop we set i < 100 so in theory the process will complete at 99%
backgroundWorker1.ReportProgress(100);
}
private void backgroundWorker1_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
private void backgroundWorker1_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
{
if (e.Cancelled)
{
lblStatus.Text = "Process was cancelled";
}
else if (e.Error != null)
{
lblStatus.Text = "There was an error running the process. The thread aborted";
}
else
{
lblStatus.Text = "Process was completed";
}
}

Categories