2017-01-21 7 views
0

「OnTimeEvent」に「frmDOOR」というフォームを閉じることはできません。タイムドイベントのフォームを閉じる

frmDOOR close = new frmDOOR 
close.close(); 

これは機能しません。私はautoresetがfalseに設定されているにもかかわらず、それは自分自身を繰り返します。私はあなたが間違っていることを見つけることができれば嬉しいです。

public partial class frmDOOR : BASEFORM 
{ 
    public frmDOOR() 
    { 
     InitializeComponent(); 
     System.Timers.Timer aTimer = new System.Timers.Timer(); 
     aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent); 
     aTimer.Interval = 1000; 
     aTimer.AutoReset = false; 
     aTimer.Enabled = true;   
    } 

    private static void OnTimedEvent(object source, ElapsedEventArgs e) 
    {     
     frmUser regform = new frmUser(); 
     regform.StartPosition = FormStartPosition.CenterParent;    
     regform.ShowDialog(); 
    }   
} 
+0

クロススレッド操作の例外がスローされます。 –

答えて

1

あなたは、フォームの現在のインスタンスを閉じるようにしたい場合は、単純に(あなたが独自のメソッドを呼び出しているように、そのをしても必要とされていない)thisでそれを参照してください。

System.Windows.Forms.Timerを使用すると、クロススレッドの問題を解決できます。

System.Windows.Forms.Timer aTimer = new System.Windows.Forms.Timer(); 

public frmDOOR() 
{ 
    InitializeComponent(); 
    aTimer.Tick += new ElapsedEventHandler(OnTimedEvent); 
    aTimer.Interval = 1000; 
    aTimer.Enabled = true;   
} 



private static void OnTimedEvent(object source, EventArgs e) 
{     
    this.Close(); 
    // or even shorter just Close(); 
    // let's stop the timer as well 
    aTimer.Stop(); 

    frmUser regform = new frmUser(); 
    regform.StartPosition = FormStartPosition.CenterParent;    
    regform.ShowDialog(); 
} 
0

System.Timers.Timerを使用しないで、別のスレッドでイベントを呼び出します。
単にWindows.Forms.Timerを使用してください。あなたはdesinger形式で作成し、そのTickイベントも作成できます。タイマーは非常に正確ではありませんが、ほとんどの場合十分です。

関連する問題