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

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

C# と VB.NET の入門サイト

Re[5]: STAとは?


(過去ログ 28 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■13090 / inTopicNo.1)  STAとは?
  
□投稿者/ ゆうや (1回)-(2008/01/24(Thu) 11:14:20)

分類:[C#] 

C#で(ファイルを開く)ダイアログを表示するときにリリースモードだと大丈夫なのですが
デバッグモードだと

追加情報: OLE が呼び出される前に、現在のスレッドが Single Thread Apartment (STA) モードに設定されていなければなりません。Main 関数に STAThreadAttribute が設定されていることを確認してください。 この例外はデバッガがプロセスにアタッチされている場合にのみ発生します。

とかかれたMessageBoxがでて処理が終わってしまいます対処の方法をおしてくれませんか?
ちなみにダイアログは下のソースでだしています。

public bool Create_Dialog(ref OpenFileDialog openFileDialog1, string title, string filter)
{

openFileDialog1 = new OpenFileDialog();

// ダイアログのタイトルを設定する
openFileDialog1.Title = ")";

string stCurrentDir = System.IO.Directory.GetCurrentDirectory();

// 初期表示するディレクトリを設定する
openFileDialog1.InitialDirectory = stCurrentDir;

// 初期表示するファイル名を設定する
openFileDialog1.FileName = "";

// ファイルのフィルタを設定する
openFileDialog1.Filter = "Xファイル|*.x";

// ダイアログボックスを閉じる前に現在のディレクトリを復元する (初期値 false)
openFileDialog1.RestoreDirectory = true;

if (openFileDialog1.ShowDialog() == DialogResult.OK) { return true; }
}
引用返信 編集キー/
■13094 / inTopicNo.2)  Re[1]: STAとは?
□投稿者/ Hongliang (229回)-(2008/01/24(Thu) 11:52:00)
STA については色々複雑なので省略。興味があるなら「スレッドアパートメント」とかで調べてみてください。

さて、Main メソッドに [STAThread] 属性は付いていますか?
引用返信 編集キー/
■13121 / inTopicNo.3)  Re[2]: STAとは?
□投稿者/ ゆうや (2回)-(2008/01/24(Thu) 20:50:43)
Hongliangさんに返信ありがとうございます

STAThread属性は付いていません。二重起動を確実に禁止するものですよね?

引用返信 編集キー/
■13124 / inTopicNo.4)  Re[3]: STAとは?
□投稿者/ ゆうや (3回)-(2008/01/24(Thu) 21:05:26)
Hongliangさんの言うように
main関数に[STAThreadAttribute] を設定したら直りました重ねてありがとうございます。
ですがなぜ直ったのかが理解できていなので、連続で質問をして申し訳ないのですが理由の方を
教えていただけないでしょうか?
引用返信 編集キー/
■13125 / inTopicNo.5)  Re[4]: STAとは?
□投稿者/ 七曜 (47回)-(2008/01/24(Thu) 21:08:56)
No13124 (ゆうや さん) に返信
> Hongliangさんの言うように
> main関数に[STAThreadAttribute] を設定したら直りました重ねてありがとうございます。
> ですがなぜ直ったのかが理解できていなので、連続で質問をして申し訳ないのですが理由の方を
> 教えていただけないでしょうか?

[STAThread]は、二重起動防止とは関係ないような・・・。
MSDNを見てみてください。

[STAThreadAttribute クラス]
http://msdn2.microsoft.com/ja-jp/library/system.stathreadattribute.aspx
引用返信 編集キー/
■13127 / inTopicNo.6)  Re[4]: STAとは?
□投稿者/ 渋木宏明(ひどり) (636回)-(2008/01/24(Thu) 22:13:14)
渋木宏明(ひどり) さんの Web サイト
> ですがなぜ直ったのかが理解できていなので、連続で質問をして申し訳ないのですが理由の方を
> 教えていただけないでしょうか?

STA/MTA は COM の用語です。

ものすごく簡単に言うと「OLE/COM サーバの手続き呼び出しの管理方法を決める属性のようなもの」で、スレッドに対して設定します。

詳細は長くなるので、興味があれば書籍などで調べてみてください。

で、どうして Main() に STAThread 属性をつけないと問題が発生するか、ですが、ActiveX コントロールは STA で動作させる決まりになっています。

提示されているコードではそれらを明示的に使用しているようには見えませんが、OpenFileDialog が内部で ActiveX コントロールを使用していて、Main() に STAThread 属性がないことから、OpenFileDialog.ShowDialog() で ActiveX コントロールの機能呼び出しに失敗しているものと思います。

引用返信 編集キー/
■13130 / inTopicNo.7)  Re[5]: STAとは?
□投稿者/ ゆうや (4回)-(2008/01/24(Thu) 22:54:53)
なるほど呼んでいてActiveX コントロールなんて使っていないのにと思ったのですが
内部で使用していたのですね!ありがとうございます解決致しました
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -