現在C#で
①プログラム起動時にMainフォーム(frmMain)が現れる。
②そのMainフォームから別のフォームを現す。
③その別のフォーム(frmStart)は15秒経過したら、閉じる
のようなことを行いたいです。
しかし、下のようにタイマ内でCloseするとできません。
何が悪いのでしょうか?
もしよろしければアドバイスなどいただきたいです。
お願いいたします。
public partial class frmMain : Form { public frmMain() { InitializeComponent(); } private void frmMain_Load(object sender, EventArgs e) { WriteLog("\r\n☆-----------------------起動開始-----------------------☆"); frmStart.Show(); } //以下タイマ処理。ここでは一度だけ呼び出し。タイマ関数内で再帰呼び出しを実行 var timer = new System.Threading.Timer(TimerCallback); timer.Change(0, Timeout.Infinite);//第一引数は、1回目の実行までの待機時間。第二引数は、それ以降のループ間隔。 } public partial class frmStart : Form { static int CountDown = 0; static string label1Text; public frmStart() { InitializeComponent(); } static System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer(); private void frmStart_Load(object sender, EventArgs e) { myTimer.Tick += new EventHandler(TimerEventProcessor); myTimer.Interval = 1000; myTimer.Start(); } private static void TimerEventProcessor(Object myObject,EventArgs myEventArgs) { CountDown++; Console.WriteLine(CountDown); if (CountDown>=15) { GlobalVariables.OpenTimeLagFlg = true; Console.WriteLine("15秒経過したので終了"); myTimer.Stop(); This.close(); } } コード
`しかし、下のようにタイマ内でCloseするとできません。`
の「できません」というのは、「15秒待ち続けても閉じることが無い」、「15秒後にエラーとなって閉じることが無い」
のどちらでしょうか?
まずこのコードはコンパイル通りますか?
一応言っておくとTickイベントで自殺させることは
何の問題もなく可能です。
中途半端にコードを編集して載せてるっぽい。
ぱっと見ただけでも確実にコンパイルエラーになるコード。
すみません、こkのコード自体は一部修正させたものです。
また、できない というのは、「15秒待っても閉じない」 です。
みんなが言ってるくらい明らかに「一部」修正どころではないんですよ。
ソースを丸コピして提示しないなら修正前のコードがおかしい、で解散です。
回答でも言われてますが、Tick中にthis.Close()は問題なく動作しますので。
問題の本質がわかってないのにコードを編集して(しかも間違った形で)提示しても、読んだ側に伝わるわけないので、あなたがよっぽど腕に自信があって自分は完璧に問題を把握している、という場合以外は編集せずにコードを載せましょう。
そのままなら長すぎる場合、現象が再現する最小限のコードを作って自分で動かしてみてから質問しましょう。(この過程を経るだけでも実力が身につきます)
回答2件
あなたの回答
tips
プレビュー