まず第一に、これがばかげた質問かどうかはわかりません。私はこのシナリオを持っています、最初に私はメインウィンドウを持っています
public MainWindow()
{
InitializeComponent();
//dt is a System.Windows.Threading.DispatcherTimer variable
dt = new System.Windows.Threading.DispatcherTimer();
dt.Interval = new TimeSpan(0, 0, 0, 0, 30000);
dt.Tick += new EventHandler(refreshData);
dt.Start();
}
refreshDataメソッドはこれを行います:
public void refreshData(object sender, EventArgs e)
{
Conection c = new Conection();
//this method just returns 'hello' doesn't affect my problem
c.sayHello();
}
このメインウィンドウにもボタンがあり、ボタンをクリックすると別のクラスに呼び出されます
private void button1_Click(object sender, RoutedEventArgs e)
{
ShowData d = new ShowData();
d.Show();
}
このクラスはメインウィンドウとほとんど同じで、独自のDispatcherTimerもあります
public ShowData()
{
InitializeComponent();
dt = new System.Windows.Threading.DispatcherTimer();
dt.Interval = new TimeSpan(0, 0, 0, 0, 30000);
dt.Tick += new EventHandler(refreshData);
dt.Start();
}
public void refreshData(object sender, EventArgs e)
{
Conection c = new Conection();
c.sayHello();
}
Visual Studioデバッガーを使用してsayHelloの呼び出しを追跡します。問題は、「ShowData」ウィンドウを閉じたときに、ShowDataクラスからのsayHelloの呼び出しがまだ表示されていることです。
窓をきちんと閉めていませんか?ウィンドウを閉じた後、どうすれば通話を停止できますか?
PS:on_closeingイベントでDispatcherTimerをnullに設定してみました