none
Windows2000 で OpenFileDialog でマイドキュメントを開くと固まる。 RRS feed

  • 質問

  • GotDotNet で OpenFileDialog でダイアログが開かない
    http://www.gdncom.jp/general/bbs/ShowPost.aspx?PostID=41791
    と同じ原因かもしれませんが、件名のように固まります。
    XP では起きません。

    #こちらのサイトでも同じような現象がでることがかかれています。http://cgi33.plala.or.jp/biwakobo/showhtml.cgi?f=arx_cs02

    なんとか対処する方法はないでしょうか?

     環境は Windows 2000 VS2003 C#

    補足:
    #ダイアログが開かないのと同様、別のアプリでは正常に動作
    #動かないアプリはWebメソッドを呼んでいるが、Webメソッドコール前だと正常に動作
    #動かないアプリでWebメソッドコール前に正常動作した後は、コール後でも正常に動作

    2006年2月16日 6:41

すべての返信

  • 再現するコードがないと難しいですね~。
    私は OpenFileDialog は任意の UserControl を張れるようにしたりしてるので標準のクラスは使ってないのですが、
     Loki Japan は書きました:

    #こちらのサイトでも同じような現象がでることがかかれています。http://cgi33.plala.or.jp/biwakobo/showhtml.cgi?f=arx_cs02

    こちらでは、SDK のサンプル OpenFile.cs で発生するとあるので試してみると、確かに発生しました。手元のコードだと発生しないことから、このサンプルとの違いを1つづつつぶしていくと確認できそうです。
    # すくなくとも、このサンプルは一見するだけであぶなそうなところが多いです
     
    Loki Japan さんは、標準の OpenFileDialog で問題が発生しているのでしょうか? GetOpenFileName を呼んでいて問題が発生しているのでしょうか?
     
    2006年2月16日 11:53
  • Lady.BUG さん>
    発生しているのは標準の OpenFileDialog コントロールです。
    今回かなり調査しているのですが、問題を難解にしているのは、


      ・不具合が起きるアプリのソースを削りに削って、WEBサービスを1回コール後OpenFileDialog.ShowDialog() を実行するようコーディング。
      ・新規にプロジェクトを起こして上記のコードをコピペ。

    で、新規のほうは正常に動作するところです。プロジェクトの設定や、フォーム等のプロパティがすべて同じなのも確認しました。当然コールするWEBサービスも同じものです。

    なので再現するコードは



    MyService service = new MyService();
    service.sample1();
    fileOpenDialog.ShowDialog();

     

    です。おそらく普通にこれを作ると、普通に正常に動いちゃうと思います・・・

    #ちなみに不具合が起きるアプリをこのままXPに持っていくと正常に動作します。

    2006年2月17日 0:33
  • 再現に関しては前回書いたように SDK のサンプルで十分なようです。
    SDK のサンプルを何点かいぢってみましたが、問題を解消できませんでした。
     
    問題の再現手順として、「マイドキュメントフォルダ」を「仮想フォルダとして開く」必要があるようです。
    マイドキュメントフォルダの実体 (C:\Document and Settings\username\...など) や、デスクトップなどの仮想フォルダは特に問題が発生しないようです。
     
    自作の MyOpenFileDialog クラスを参照してサンプルプログラムの Main() を
     

    void Main(string[] args)
    {
      if (args.Length > 0) new MyOpenFileDialog().ShowModal();
     
      // 以下サンプル未編集
    }

     
     
    と変更しまして試すと、
     
    C:\> OpenFileDlg           -> ハングアップする
    C:\> OpenFileDlg  test   -> 2回のダイアログが両方ハングアップしない
     
    となるので、WebMethod に限らず、なんらかの手順を経由すると正常に動作するようですね。
    # メイン環境は Windows2000 ですが、MyOpenFileDialog クラスでハングアップしたことはありません。
     
    MyOpenFileDialog は System.Windows.Forms.CommonDialog を継承しているので、CommonDialog クラスがいくつかの必要な初期化を行って問題を回避しているのかと思いましたが、
     Loki Japan は書きました:
    発生しているのは標準の OpenFileDialog コントロールです。
    とのことですので、CommonDialog の派生クラスであることは関係なさそうですね。
     
    2006年2月17日 6:26
  • Lady.BUGさん>

    いろいろ試していただきありがとうございます。
    私のほうでも、新しくいろいろなプロジェクトを作成してOpenFileDialogをはりつけて確認しましたが、Windows2000で問題なくマイドキュメントは開きます。

    不具合が起きるアプリを新しく作った空のソリューションおよびプロジェクトでファイルを追加してもハングしました。
    不具合が起きるプロジェクトに不具合が起きないOpenFileDialogをはりつけたフォームを追加してスタートフォームにすると正常に動きます。

    先に説明しましたが、不具合の起きるアプリはWEBメソッドの呼び出しを境に動作が変わりました。
    そこで、新しいフォームに不具合の起きるソースをコピーし、コントロールも配置して実行すると、やはりハングしますが、今度はWEBメソッドの呼び出しではなく、COMポートのオープンのソースを消すと動作するようになりました。

     Lady.BUG は書きました:
    WebMethod に限らず、なんらかの手順を経由すると正常に動作するようですね。

    標準のOpenFileDialogコントロールで上記を実現するにはどうすればよいでしょうか?
     Lady.BUG は書きました:
    問題の再現手順として、「マイドキュメントフォルダ」を「仮想フォルダとして開く」必要があるようです。

    確かにパスを直接入力すると大丈夫でした。

    2006年2月17日 7:49
  • http://forums.belution.com/ja/vc/000/205/32s.shtml
    このような現象がアンマネージドでも出るようなので、GetOpenFileName に問題があるのでしょうか?
    OpenFileDialog はたぶん中で GetOpenFileName を呼んでるんですよね?

     Lady.BUG は書きました:
    なんらかの手順を経由すると正常に動作するようですね。

    同じようにやりましたが、自分の不具合がおきるアプリではハングしました。

    ちなみに WebMethod や COMオープン を呼ぶと正常なのではなく、
    呼んだあとだとマイドキュメントの選択でハングします。

    追記:
    ためしに GetOpenFileName を呼んでみましたが、こちらはマイドキュメントを選択すると COMオープン にかかわらずハングアップしました。。。

    2006年2月20日 1:56
  • ご報告ありがとうございます。
    現象を再現いたしました。ただいま、原因を調査中ですので、今しばらくお待ちいただけますようお願いします。

    この投稿は現状のまま何の保証もなく掲載しているものであり、何らかの権利を許諾するものでもありません。コミュニティにおけるマイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。詳しくは http://www.microsoft.com/japan/communities/msp.mspx をご覧ください。

    2006年2月20日 9:25
  • はじめまして

    古いスレッドにもかかわらず深刻な問題のため投稿させていただきました。

    開発環境:
     OS: Windows7 Home Edition 64bit
     Visual Studio 2008 C# Express

    事象:
     以下のような単純にファイルダイアログを表示してパスを取得するコードなのですが、
     ほぼ9割の確率でハングします。 しかも次第にあらゆるプログラムが応答なしとなり
     最終的にはOSも制御不能の状態になります。
     この状態になるまで数秒程度です。 
     シャットダウンすら不能なためPCの電源ボタン長押しでしか対処方法がなくなります。
     過去事例で解決策があればお教えいただけますでしょうか?

            private void button1_Click(object sender, EventArgs e)
            {
                try {
                    this.openFileDialog1.Filter = "CSVファイル(*.csv)|*.csv";
                    if (this.openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
                        this.textBox1.Text = this.openFileDialog1.FileName;
                    }
                    else {
                    }

                }
                catch (Exception ex) {
                    MessageBox.Show(ex.Message);
                }
            }

    2012年7月8日 16:11
  • 環境も現象も異なるのでスレッドを分けませんか?

    元スレッドは数年前のものであること、環境が 2000 であるため世代がかなり古いことから別の現象(あるいは原因と言うべきか)だとみています。
    別スレッドに投稿される際は、別のアプリではどうかとか、Win32API を直接呼んだ場合にどうかとか、切り分けに Try したことがあれば添えてください。

    2012年7月8日 16:17
    モデレータ
  • 承知しました。
    そのようにしてみます。

    2012年7月8日 16:26