C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.55290 の関連記事表示

<< 0 >>
■55290  Show()とShowDialog()
□投稿者/ これからC#! -(2010/11/25(Thu) 16:54:24)

    分類:[.NET 全般] 

    お世話になります。

    データをサンプリングしてファイルへ保存。
    また、サンプリング中に、ファイルからデータを帳票表示する画面を開くこともできる。
    というアプリケーションを作成しようと思っています。

    帳票表示画面は、ShowDialog()かShow()でオープンするのかどちらが適切なのでしょうか?
    感覚だけで根拠はないのですが、ShowDialog()でオープンすると、条件によっては
    サンプリング漏れが生じるような気がしています。

    よろしくお願いします。

    private void button1_Click(object sender, EventArgs e)
    {
    //方法1 ShowDialogでオープン
    frmGraph fg = new frmGraph();
    fg.ShowDialog(); //サンプリングしたデータを帳票表示する

    //---------------------------------------------------------------------------
    //方法2 Showでオープン
    //bool isFormOpen = true; //開いたフォームを閉じるときにfalseにする
    //frmGraph fg = new frmGraph();
    //fg.Show(); //サンプリングしたデータを帳票表示する

    //while (isFormOpen)
    //{
    // Application.DoEvents();
    // Thread.Sleep(2);
    //}
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
    //1秒毎にデータをサンプリングする
    }
親記事 /過去ログ92より / 関連記事表示
削除チェック/

■55293  Re[1]: Show()とShowDialog()
□投稿者/ shu -(2010/11/25(Thu) 17:44:01)
    No55290 (これからC#! さん) に返信

    button1_ClickでFormが閉じるのを待つならShowDialogの方が安定するかと思います。
    Formが閉じるのを待たないでメイン画面の操作を可能にするならShowでないと駄目です。
記事No.55290 のレス /過去ログ92より / 関連記事表示
削除チェック/

■55300  Re[1]: Show()とShowDialog()
□投稿者/ Azulean -(2010/11/25(Thu) 22:35:53)
    No55290 (これからC#! さん) に返信
    > 帳票表示画面は、ShowDialog()かShow()でオープンするのかどちらが適切なのでしょうか?
    > 感覚だけで根拠はないのですが、ShowDialog()でオープンすると、条件によっては
    > サンプリング漏れが生じるような気がしています。

    「気がする」のはなぜでしょうか?
    何か聞いたことがある、見たことがある、経験したことがあるから不安に思うのでしょうか?

    私の感覚では、ShowDialog でサンプリング漏れが出るというのであれば、それは Show でも同じように漏れが出るでしょう。


    > //方法2 Showでオープン
    > //bool isFormOpen = true; //開いたフォームを閉じるときにfalseにする
    > //frmGraph fg = new frmGraph();
    > //fg.Show(); //サンプリングしたデータを帳票表示する
    >
    > //while (isFormOpen)
    > //{
    > // Application.DoEvents();
    > // Thread.Sleep(2);
    > //}

    通常、このようなコードは書かないでください。
    Application.DoEvents を回している間、button1 が押せますし、本来不要な Sleep やループを書かないといけなくなっています。
    単にフォームを閉じるまで待つだけであれば ShowDialog が適切です。


    ところで、この掲示板は半角カタカナは使用しないでくださいとされています。
    上の「利用方法/規約」のリンクを開き、そのページの下の方の箇条書きをご確認ください。
記事No.55290 のレス /過去ログ92より / 関連記事表示
削除チェック/

■55301  Re[2]: Show()とShowDialog()
□投稿者/ これからC#! -(2010/11/25(Thu) 23:30:34)
    No55300 (Azulean さん) に返信
    > ■No55290 (これからC#! さん) に返信
    >>帳票表示画面は、ShowDialog()かShow()でオープンするのかどちらが適切なのでしょうか?
    >>感覚だけで根拠はないのですが、ShowDialog()でオープンすると、条件によっては
    >>サンプリング漏れが生じるような気がしています。
    >
    > 「気がする」のはなぜでしょうか?
    > 何か聞いたことがある、見たことがある、経験したことがあるから不安に思うのでしょうか?
    >
    > 私の感覚では、ShowDialog でサンプリング漏れが出るというのであれば、それは Show でも同じように漏れが出るでしょう。
    ShowDialogやMessageBoxなど、OKボタンを押下しないと、処理が次へ進まないようなものは
    タイマ(Windows.Forms.Timer)の動きに影響が出てしまうのでは、という勝手な思い込みで書いてしまいました。
    すみません。

    このような思い込みをしているので、サンプリングを行うタイマも、スレッドタイマで別スレッドに
    しておくほうのがよいのかな?などとも思っています。


    >> //方法2 Showでオープン
    >> //bool isFormOpen = true; //開いたフォームを閉じるときにfalseにする
    >> //frmGraph fg = new frmGraph();
    >> //fg.Show(); //サンプリングしたデータを帳票表示する
    >>
    >> //while (isFormOpen)
    >> //{
    >> // Application.DoEvents();
    >> // Thread.Sleep(2);
    >> //}
    >
    > 通常、このようなコードは書かないでください。
    > Application.DoEvents を回している間、button1 が押せますし、本来不要な Sleep やループを書かないといけなくなっています。
    > 単にフォームを閉じるまで待つだけであれば ShowDialog が適切です。
    確かにそのとおりでした。

    > ところで、この掲示板は半角カタカナは使用しないでくださいとされています。
    > 上の「利用方法/規約」のリンクを開き、そのページの下の方の箇条書きをご確認ください。
    ご指摘ありがとうございます。
    以後、気をつけます。

記事No.55290 のレス /過去ログ92より / 関連記事表示
削除チェック/

■55303  Re[3]: Show()とShowDialog()
□投稿者/ Azulean -(2010/11/26(Fri) 00:23:23)
    No55301 (これからC#! さん) に返信
    > ShowDialogやMessageBoxなど、OKボタンを押下しないと、処理が次へ進まないようなものは
    > タイマ(Windows.Forms.Timer)の動きに影響が出てしまうのでは、という勝手な思い込みで書いてしまいました。

    ShowDialog や MessageBox.Show を実行してダイアログが閉じるまで、あるいはメッセージボックスのボタンが押されるまでの間も、System.Windows.Forms.Timer によるタイマーイベントが呼び出されます。
    今回は都合が良いのかもしれませんが、「呼び出されない」と誤解して不具合を生むことがあります。

    たとえば、Timer1_Tick で MessageBox.Show としてメッセージ表示を考えていると、1 秒ごとに新しいメッセージボックスがどんどん出てくるとかいう落とし穴にはまることもあります。


    > このような思い込みをしているので、サンプリングを行うタイマも、スレッドタイマで別スレッドに
    > しておくほうのがよいのかな?などとも思っています。

    サンプリング間隔とかコントロールと絡むかなどで決めていくことです。
    System.Windows.Forms.Timer で十分かもしれませんし、System.Threading.Timer などの別スレッドにした方が良いかもしれませんし、Thread としてポーリングするスレッドを作った方が良いかもしれません。
    それらは求めていること、それぞれの手法の性質、実装の手間・効率、などから取捨選択することになりますので、これが良いと一律に言えるものではありません。
記事No.55290 のレス /過去ログ92より / 関連記事表示
削除チェック/

■55312  Re[4]: Show()とShowDialog()
□投稿者/ これからC#! -(2010/11/26(Fri) 13:25:40)
    No55303 (Azulean さん) に返信
    > ■No55301 (これからC#! さん) に返信

    > たとえば、Timer1_Tick で MessageBox.Show としてメッセージ表示を考えていると、1 秒ごとに新しいメッセージボックスがどんどん出てくるとかいう落とし穴にはまることもあります。
    >

    実際に動作させてみましたが、おっしゃられている動きになりました。
    今後、気をつけていきたいと思います。


    > それらは求めていること、それぞれの手法の性質、実装の手間・効率、などから取捨選択することになりますので、これが良いと一律に言えるものではありません。

    なるほど。一律には決めることができないということから、例えば”サンプリング方法にはこの方法!”などというような
    HPや書籍が少ないんですね。
    経験がものをいうんでしょうね。

    丁寧な回答、ありがとうございました。
記事No.55290 のレス / END /過去ログ92より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -