• 締切済み

アプリの終了とイベントの発生順序 C#

C#2005でアプリの終了とイベントの発生順序について悩んでいます。 System.Environment.Exit(0); を使うと、 FormClosingイベントが発生せず、直ちに終了するのですが これを回避できる方法はありますか? 話は戻りますが、アプリの確実な終了はEndよりSystem.Environment.Exit(0);の方が まともだと思って使いましたが、それであっているのでしょうか? 以前、Application.Exit();で常駐するソフトで使いましたが終了しなかったので、 System.Environment.Exit(0);を使いました。 また、皆さんはイベントの発生順番を調べるのにどのようにしていますか? 良いサイトがあれば教えてください。

みんなの回答

  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.1

Exit()については、MSDN Libraryにおいて、Application.Exit()は必ず強制的に終了するわけではないと書かれております。 どちらが良いのかはわかりかねます。 2つ目のイベントについてですが、コンソールアプリケーションなら、各イベントごとにイベント名をコンソールに吐き出させて順番を確認、またフォームであれば、テキストボックスとかだと書き込むとイベントが発生してしまうので、ファイルを開いてイベント名を書き込んでいって後で確認ですかね。

関連するQ&A

  • イベント発生順序

    いつもお世話になっています。 JavaScriptの発生順序を制御する方法はありますでしょうか? 例えば、あるテキストボックスがあって、 A1→B2とフォーカスが移るときのイベントですが、 B2.onFocus→A2.onBlurの順番でイベントが発生していますが、これを A2.onBlur→B2.onFocusとしたいです。 IE限定でいいので、よろしくお願いします。

  • FormClosing イベント から終了を取り消すには VB2005

    VB2005で開発しているのですが。 FormClosingイベントの中で。Formの終了イベントを取り消すにはどうしたらよいでしょうか? たとえば。こんなコードがあったら 終了イベントの取り消しにはなんと書いたらよいでしょうか? Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing  If TextBox1.Text = "01" Then    MsgBox("完了!!", MsgBoxStyle.OkCancel)  Else   ' ここに取消終了のコードを書いたらいいのですか? End If End Sub すいませんが。アドバイスをお願いします。 開発環境: XinXP Pro SQL Server2005 Express VS2005 Pro VB2005

  • C#でアプリの終了の仕方

    今までVC6で挫折したのですが、最近VisualStudio2005を購入しC#がC++Builderのように見えたと思いきや プログラミングが未熟で、Windowsアプリケーションの終了の仕方がわかりませんでした。 Cの場合はexit(0);で終われたのですが、C#ではどのように終了する手続きを書けば良いのでしょうか? C#でWindowsアプリの作り方が載っている本をご存知の方教えてください。

  • C# フォームを閉じてもプログラムが終了しない

    前略 ・C#の初心者です。 ・下記のようなプログラムを作りたいと思っています。プログラムは<作りたいプログラム>の仕様どうりに動作していますが、Form1のFormClosingイベントに Application.Exit()を追加しないと フォーム1で "X"(閉じる)をクリックしても(フォームは非表示になりますが)プログラムが終了しません。プログラムでどこかおかしな部分があると思っています。Application.Exit()を追加しないでもプログラムを終了する方法を教えてください。 <作りたいプログラム> (1)Form1 のbutton1をクリックすると新しいForm2が作成され表示される。Form2が表示されるとForm1は非表示となる。 (2)Form2 のbutton1をクリックするとForm2が非表示となりForm1が表示される。 (3)Form1 の "X"(閉じる)をクリックしてプログラムを終了する。 //Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace formClose { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form2 form2 = new Form2(); form2.Show(); //フォーム2を表示 this.Hide(); //フォーム1を非表示 } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { Application.Exit(); //アプリケーション終了 } } } //Form2.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace formClose { public partial class Form2 : Form { Form1 form1 = new Form1(); public Form2() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { this.Close(); //フォーム2を閉じる } private void Form2_FormClosing(object sender, FormClosingEventArgs e) { form1.Show(); //フォーム1を表示する } } } 以上

  • 「SceCli」というイベントの発生条件は?

    [イベントビュアー] -> [アプリケーション]の一覧に「SceCli」というイベントが発生していますが、このイベントは何がきっかけで動作するのでしょう? 実はExcelのマクロ実行中にこのイベントが発生すると、マクロが異常終了してしまい困っています。

  • OSシャットダウン時の常駐アプリ終了について

    現在VB2005にて常駐アプリの開発を行っています。 OSはWindowsXPです。 起動はOS起動時にスタートアップより起動するのですが、 OSのシャットダウン時に常駐アプリが終了していない為、 「このプログラムからの応答がありません(待機、終了、キャンセル)」が表示されます。 この方法を回避するには、シャットダウンを常駐アプリ側で検知してアプリ自身が終了処理をすると思いますが、方法がよくわかっていません。 http://dobon.net/vb/dotnet/system/sessionending.html ↑のURLを参照してみたのですが、シャットダウン時にメッセージの表示はされるのですが、メッセージ表示部をアプリ終了処理に置き換えても、終了処理が行われませんでした。 どなたか、お分かりになる方ご教授いただければと思います。

  • Socket通信で、通信終了のイベントが発生しない

    クライアント(Windows)とサーバ(Unix)とSocket通信をするアプリを作っています。処理内容はクライアントのデータファイルをサーバに送信(アップデイト)し、サーバ側でデータを解析し、その結果を印刷するという手順です。 WinSockを使って、送信そのものはうまくいくのですが、サーバでデータを解析し結果を印刷するのに時間がかかり(10秒以上)、その間は送信終了のイベントが発生しません。これはサーバ側での処理を exec関数とwait関数で行っているので、正しい事態なのですが、データの送信が終わったら後はサーバ側で勝手にやって欲しいのです。サーバでの処理を system関数に置換えたり、バックグランド処理にしてもやはり処理が終わるまで送信終了のイベントが発生しません。何かいい方法をお教えください。

  • C#イベントで作る変数の受け渡し

    c#初心者なので、教えて下さい。  Windowsのフォームアプリケーションです。例えば、あるボタンのクリックイベントにファイルをよむを登録する、とします。この場合はイベントで定義した文字列の配列だとします。そこへ読み込みます。  この配列を使って、加工を行う場合は、ローカルな変数になるので、そのイベントが終了してしまえば、配列は存在しないと思います。  C#ではグローバル変数という物はないそうです。擬似的に作ることは出来るようですが、普通の場合はどうすれば、これを回避できますか?  擬似的グローバル変数を作ったとしても、修飾が付いて見にくいし、ローカルで動的に確保した配列は、大きさが変わるので、呼ぶ側の方で確保しようにも、大体の大きさぐらいで、正確に確保できないように思います。  どうしたらスマートに解決できますか?

  • 他のアプリを起動してウィンドウの変更のイベントを発生させたい

    VB.NETで他のアプリケーションを起動して、 そのアプリのウインドウがサイズや位置を変更されたり、 表示スタイルが変更されたら、イベントを発生させたいのですが、 どのようにしたら出来るでしょうか。 Public WithEvents P As Process このように書いてみたのですが、 イベントにはDisposedとExitedしか出ませんでした。 よい方法をご存知でしたらご教示願えないでしょうか。 宜しくお願いします。

  • エクセルVBAのイベントについて教えてください。

    エクセルVBA初学者のです。 "C9"にいれるとchangeイベントが発生するコードなんですが、 "C9"のほかに"D1"においてもchangeイベントを発生させたいのですが 下記のコードに続けて書いてもイベントが発生しないのですが どのように書けばよいのでしょうか? private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("C9")) Is Nothing Then Exit Sub Range("H14:H56").Interior.ColorIndex = 2 If Intersect(Target, Range("D1")) Is Nothing Then Exit Sub Range("G14:G56").Interior.ColorIndex = 2 End Sub よろしくお願いします。