If you call Stop, your timer event should not fire until you set the IsEnabled property to true.
So I suggest a bit of refactoring
void Window3_Loaded(object sender, RoutedEventArgs e)
{
LoadSourceFiles();
StartTimer();
}
void StartTimer()
{
dispatcherTimer.Interval = new TimeSpan(0, 0, 3);
dispatcherTimer.Tick += dt_Tick;
dispatcherTimer.IsEnabled = true;
}
void LoadSourceFiles()
{
if (!System.IO.Directory.Exists(DestinationDir))
{
System.IO.Directory.CreateDirectory(DestinationDir);
}
if (System.IO.Directory.Exists(SourceDir))
{
SourceFiles = Directory.GetFiles(SourceDir).ToList();
}
}
and call this method every time you click the start button
private void Start_Click(object sender, RoutedEventArgs e)
{
StartTimer();
}
private void Stop_Click(object sender, RoutedEventArgs e)
{
dispatcherTimer.IsEnabled = false;
}
I also suggest resetting a global variable that keeps track of files transferred to zero when inside the Tick event you find that every file has been transferred (or disable the start button)
....
else
{
Console.WriteLine(string.Format("Total number of files transferred: {0}. Transfer Completed", TransferCount + 1));
(sender as DispatcherTimer).Stop();
(sender as DispatcherTimer).Tick -= dt_Tick;
TransferCount = 0;
}
, , .