Исключение CallbackOnCollectedDelegate
Приложение - Windows Forms.
Проблема такая. После нажатия на какие-нибудь элементы на форме(textbox, button, picturebox) появляется ошибка:

При чем не сразу, а после какого-то определенного количества нажатий. Вот код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MetroFramework.Components;
using MetroFramework.Forms;
using System.Reflection;
namespace Airlines
{
public partial class MainForm : MetroForm
{
bool tick = false;
int transfersCount = 1;
public MainForm()
{
InitializeComponent();
SetDoubleBuffered(this);
SetDoubleBuffered(AirlinesLabel);
FromTextBox.LostFocus += new EventHandler(FromTextBox_LostFocus);
WhereTextBox.LostFocus += new EventHandler(WhereTextBox_LostFocus);
FromTextBox1.LostFocus += new EventHandler(FromTextBox_LostFocus);
WhereTextBox1.LostFocus += new EventHandler(WhereTextBox_LostFocus);
FromTextBox2.LostFocus += new EventHandler(FromTextBox_LostFocus);
WhereTextBox2.LostFocus += new EventHandler(WhereTextBox_LostFocus);
ClassBox.SelectedItem = 0;
ClassBox.Text = ClassBox.Items[0].ToString();
LabelTimer.Start();
}
private void FromTextBox_MouseClick(object sender, MouseEventArgs e)
{
if ((sender as TextBox).Text == "Откуда?")
{
(sender as TextBox).Text = "";
(sender as TextBox).TextAlign = HorizontalAlignment.Left;
}
(sender as TextBox).ForeColor = Color.Black;
}
private void WhereTextBox_MouseClick(object sender, MouseEventArgs e)
{
if ((sender as TextBox).Text == "Куда?")
{
(sender as TextBox).Text = "";
(sender as TextBox).TextAlign = HorizontalAlignment.Left;
}
(sender as TextBox).ForeColor = Color.Black;
}
private void FromTextBox_LostFocus(object sender, System.EventArgs e)
{
if ((sender as TextBox).Text == String.Empty)
{
(sender as TextBox).Text = "Откуда?";
(sender as TextBox).TextAlign = HorizontalAlignment.Center;
}
(sender as TextBox).ForeColor = Color.Silver;
(sender as TextBox).Enabled = false;
(sender as TextBox).Enabled = true;
}
private void WhereTextBox_LostFocus(object sender, System.EventArgs e)
{
if ((sender as TextBox).Text == String.Empty)
{
(sender as TextBox).Text = "Куда?";
(sender as TextBox).TextAlign = HorizontalAlignment.Center;
}
(sender as TextBox).ForeColor = Color.Silver;
(sender as TextBox).Enabled = false;
(sender as TextBox).Enabled = true;
}
private void LabelTimer_Tick(object sender, EventArgs e)
{
if (tick)
{
AirlinesLabel.Text = "Airlines ";
tick = false;
}
else
{
AirlinesLabel.Text = "Airlines.";
tick = true;
}
}
private void PlusButton_Click(object sender, EventArgs e)
{
if (transfersCount < 3)
{
if (transfersCount == 1)
{
FromTextBox1.Visible = true;
WhereTextBox1.Visible = true;
FromDate1.Visible = true;
WhereDate1.Visible = true;
MinusButton.Visible = true;
}
if (transfersCount == 2)
{
FromTextBox2.Visible = true;
WhereTextBox2.Visible = true;
FromDate2.Visible = true;
WhereDate2.Visible = true;
PlusButton.Visible = false;
}
transfersCount++;
}
}
private void MinusButton_Click(object sender, EventArgs e)
{
if (transfersCount == 2)
{
FromTextBox1.Visible = false;
WhereTextBox1.Visible = false;
FromDate1.Visible = false;
WhereDate1.Visible = false;
MinusButton.Visible = false;
}
if (transfersCount == 3)
{
FromTextBox2.Visible = false;
WhereTextBox2.Visible = false;
FromDate2.Visible = false;
WhereDate2.Visible = false;
PlusButton.Visible = true;
}
transfersCount--;
}
private void SwitchTheme_Click(object sender, EventArgs e)
{
if (this.Theme == MetroFramework.MetroThemeStyle.Light)
{
this.Theme = MetroFramework.MetroThemeStyle.Dark;
SwitchTheme.Image = Properties.Resources.sun as Bitmap;
AirlinesLabel.ForeColor = Color.White;
}
else
{
this.Theme = MetroFramework.MetroThemeStyle.Light;
SwitchTheme.Image = Properties.Resources.moon as Bitmap;
AirlinesLabel.ForeColor = Color.Black;
}
this.Refresh();
}
#region .. Double Buffered function ..
public static void SetDoubleBuffered(System.Windows.Forms.Control c)
{
if (System.Windows.Forms.SystemInformation.TerminalServerSession)
return;
System.Reflection.PropertyInfo aProp = typeof(System.Windows.Forms.Control).GetProperty("DoubleBuffered",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance);
aProp.SetValue(c, true, null);
}
#endregion
#region .. code for Flucuring ..
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000;
return cp;
}
}
#endregion
}
}