[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/07 13:31 / Filesize : 223 KB / Number-of Response : 993
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C#, C♯, C#相談室 Part53



1 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 20:11:11 ]
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

前スレ
C#, C♯, C#相談室 Part52
pc12.2ch.net/test/read.cgi/tech/1238548552/

Visual C# 2008 Express Edition 日本語版
www.microsoft.com/japan/msdn/vstudio/express/vcsharp/

その他テンプレ>>2-5くらい

610 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 00:03:40 ]
>>579
悪いことは言わん。明日の退社後にでも、夜でもやってるパソコン教室へ、せめて1日(2時間)だけでも行ってこい。
最低限のとっかかりがないと、参考書のコードをそのまま入力するのも大変だろうし、ぐぐることもできんはず。

つーか、俺を雇ってくれよ…

611 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 00:09:54 ]
なんか変な妄想ふくらませてるのがいるなw
習得に相当時間がかかったのだろうか。

612 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 00:12:26 ]
>>610
悪いことは言わん。明日の朝にでも職安へ行ってこい。

613 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 01:17:30 ]
>>568
明日の朝、退職願出して、ハローワークに行って、事務か介護か土方の仕事探しな。
お前みたいな奴が居ると迷惑だ。

614 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 06:32:24 ]
>>603
msdn.microsoft.com/ja-jp/library/ms229045.aspx
アンダースコア (_) やハイフン (-) など、英数字以外の文字は使用しないでください。
ハンガリー表記法は使用しないでください。


読み直したらこれはプロパティのことだけに言ってるのか一般的なことに言ってるのかがわからんようになった。


615 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 07:25:28 ]
>>614
>>586の見解で正しいと思う。

自メンバーのアクセスには全部this.つけろより、
前か後ろにアンダーバーのほうが好みだ。

616 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 08:43:36 ]
日本語使ってるコード見たことあるな

617 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 09:27:46 ]
○○○○○○ToolStripMenuItem_Click(object sender, EventArgs e)
これの前に日本語つくよねw

618 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 09:42:06 ]
インテリセンスの都合で、後ろに _ の方が好き。
アンダーバーってキーボードの位置的に押しづらくて、先頭に持ってきたくない。



619 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 09:46:47 ]
private readonly stringのメンバー変数名って大文字から始まるの?

620 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 09:58:36 ]
privateは好きにしろと何度も出てるだろ

621 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 10:18:09 ]
今はC#だからメソッド名とか大文字にしてるけどF#始めるから小文字になる予感。
そのあとC#使うときはどっちになるんだか・・・

622 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 10:24:36 ]
正直どうでもいいな。

623 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 10:25:16 ]
F#ってC#と比べてどんなメリットあるの?

624 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 10:54:16 ]
>>617
エンティティフレームワークなんて、Hogesってテーブルがあったらデフォルトで

エンティティ=Hoges
エンティティセット=Hoges設定

だぜ。

625 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 11:12:59 ]
ワロタ

626 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 12:05:34 ]
プログラミングで初めての言語が C# だとクラスとか
よくわからないままになるかもしれないかな。
C++ から入るとあまり問題にならないような気がする。

627 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 12:08:04 ]
C++こそクラスから逃げられないと思うんだが…

628 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 12:18:26 ]
C# をはじめてのプログラミング言語にすると Main メソッドをもつクラスの意味がわかりづらい。
いきなりおまじないから始まるのはちょっと考えもの。



629 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 12:30:56 ]
>>627
逃げられないからこそよくわからないままでいられないってことでしょ?

630 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 12:51:18 ]
クラス設計が難しい

631 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 14:33:24 ]
>>608
プリプロセスのうちヤバイとされる物の一つだからそりゃなくなるだろ。
また、define の方は、Conditional アトリビュートを使えとのいうがC#流。
これによって、マクロ機能等をライブラリ化する時に捨てず、きっちりdllまで維持して再コンパイル等を防止している。

632 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 15:14:12 ]
ファイル横断的にやりたいなら、
csc /define:HOGE ... やMSBUILDのスクリプトで指定するのが原則。

633 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 17:17:09 ]
C#でのスレッドセーフなプログラミングに関する簡単な質問なんですが
あるクラスインスタンスの値を取得する部分

work = myClass;

と、クラスインスタンスの参照をセットする部分

myClass = new MyClass();

これってそれぞれクリティカルセクション化しないとまずいですか?
内部で何をやっているのか分からず不安なんですが、何でもかんでもlockするのは嫌なので…

また、intなどの値型でも同じことが言えるんでしょうか。お願いします。

634 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 17:57:08 ]
前提が抜けすぎてて答えようがない。もう少しシナリオをしっかり書こうよ。

635 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 18:42:23 ]
そこだけをロックしなけりゃならないことはあまりない

636 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 18:50:18 ]
念のため、なんでもかんでもロックしたところでそれでもスレッドセーフになるわけじゃないぜ

637 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 18:59:04 ]
普通は想定される複数スレッドからの使われ方というのがあって、
その時にどのように動作させるという設計があって、
その上で内部のデータや動作が不正にならないための条件を導いて、
それを壊さないようにロックなどで保護するんだよ。

だから何の前提もなくただスレッドセーフなんてのはない。


638 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 21:49:32 ]
// どちらが実行されるでしょうか?

bool a = true, b = false, c = true;
if ((a = b == c) == (a == b == c))
 d();
else
 e();



639 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 21:53:46 ]


640 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 21:53:47 ]
宿題か?

641 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 21:55:20 ]
貼りつければ分かるから宿題じゃないです
クイズです

642 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 21:58:15 ]
不適切な問題じゃね

演算子の優先順を問う感じだろうけど=と==をどっち優先にしてもdになる気がする

643 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 22:01:08 ]
d?


644 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 22:03:05 ]
>>642

(a = t == f) == (f == t == f)
(a = f) == (f == t)
(f) == (f)
t

(a = t == f) == (f == t == f)
(t == f) == (f == t)
(f) == (f)
t

ホントだw

645 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 22:17:53 ]
あほやのう

646 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 22:26:34 ]
>>644
(f == t == f) が (f == t) ?
なんで?


647 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 22:33:06 ]
安産してeだと思った15年目の俺・・・orz

基本的に優先順位とか気にしたくないのでかっこでくくってますが( ゚Д゚)ナニカ?

648 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 22:34:56 ]
なんだろうねぇ



649 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 22:39:14 ]
なにいってんの?
eだろ

650 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 22:53:01 ]
>>644
(f == t == f) の出所は?

651 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 23:18:16 ]
(a = b == c) == (a == b == c)
=> (a = (F == T)) == (a == b == c)
=> (a = F) == (a == b == c)
=> F == (F == (F == T))
=> F == (F == F)
=> F == T
=> F

なので e が正解

652 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 23:21:37 ]
==演算子って左結合じゃなかった?

653 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 23:28:05 ]
>>651
まて結合の優先順位と、実行される順序は別だ。

(a = b == c) == (a == b == c)
=> (a = (F == T)) == (a == b == c)
=> (a = F) == (a == b == c)

1)
=> F == (F == (F == T))
=> F == (F == F)
=> F == T
=> F

2)
=> (a = F) == (T == (F == T))
=> (a = F) == (T == F)
=> F == F
=> T

654 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 23:32:29 ]
大漁ですな(;´Д`)

655 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 23:34:36 ]
式は右辺からと思っていると、
(a = b == c) == (a == b == c)
-> X == Y
の右辺Yからやることになり、地獄行きになるんです

656 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 00:13:44 ]
(==)((a = b == c), (a == b == c))

657 名前:651 mailto:sage [2009/08/06(木) 03:03:09 ]
>>652
すまん4行目は F == ((F == F) == T) だな。
結果は一緒。
ttp://msdn.microsoft.com/ja-jp/library/aa691323(VS.71).aspx

658 名前:633 mailto:sage [2009/08/06(木) 09:04:57 ]
>>634-637
遅くなってすみません。

たとえば、スレッドAとスレッドBで変数myClassを共有している

スレッドAでは、myClassに新規インスタンスをセットする

while( 1 )
{
myClass = new MyClass();
}

スレッドBでは、myClassを作業用変数に確保し、さまざまな処理を実行する
while( 1 )
{
MyClass work = myClass;
workに対しての様々な処理
}

代入演算子はオーバーロードしていません
ちょっと何をやりたいかわかりにくいかもしれませんが、これだけを見た場合に問題はありそうですか?

内部的に参照カウント関係の処理が走っていたりして、危険だったりしますか?お願いします。



659 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 09:10:07 ]
ダメダメ絶対ダメ
スレッドBのループが一回回る間にスレッドAのループが何回回るか全く分からないんだよ?
それにいくらメモリを意識しなくていいといったってさすがにノーウェイトでnewしまくったらGCの負担になる

660 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 09:21:04 ]
スレッドAとスレッドBの周回数は同期がとれていなくていいです
GCの負荷は考慮しないとして、スレッドセーフかっていう質問なんですが・・・

要するに
myClass = new MyClass();

MyClass work = myClass;
のところをロックしないとメモリを壊したりしますか?ってことが聞きたいんです

C言語なら問題無いはずですがC#だとどうなのかな?って

>>635 の言うようにこれ自体はロックしなくても問題ないんですかね^^;

661 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 09:28:22 ]
myClassが共有されてると言うことでおけー?
ロックされる云々の前に多分それ意図してるように動かないよ。エスパーしてみるとw

662 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 09:29:44 ]
必ずしも間違った扱いではないけど問題あるかどうかは別だな
AでMyClassのコンストラクタが呼ばれた後に,Bで古いインスタンスが使われる可能性はある

663 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 09:32:02 ]
ロックするならスレッドBの書かれてない処理のところじゃね?

664 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 09:36:37 ]
参照やintへのアクセスはアトミックと規定されている。
つまり、myClassが32bitだとすると16bitだけ新しい値に書き換わってるという状態は存在しない。
一方doubleやlongはそういう状態が発生しえる。

ただしマルチCPUの場合はもう少しややこしくて、
スレッドAが書き換えたmyClassの内容がスレッドBに反映するまでにタイムラグが発生する場合がある。
これが問題になるならlockを使用するかmyClassをvolatileで宣言する。
Cのvolatileとの違いに注意。

665 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 09:44:52 ]
あと、C#のGCは参照カウントじゃないよ。

666 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 09:58:55 ]
ま、確実性という意味なら、volatileつけとけば確実。
ただしなくてもメモリが壊れるとかのレベルの問題はない。

実質的にはCLR2.0以降のメモリモデルと86系CPUのメモリモデルから、
事実上はvolatileなくても問題ないはず。



667 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 10:02:26 ]
あ、確実というのは、可能な限り最新のインスタンスを使うという意味でね。


668 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 10:13:30 ]
Interlocked.Exchangeでも使えば



669 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 10:40:47 ]
volatileを使わない場合はもうひとつ問題があって、
MyClassの初期化が終わる前にスレッドBに参照が渡ってしまう可能性がある。
ただし、これが起きるのはMSだとItatiumの場合だけ。
原理的には有名なダブルチェックロッキング問題と同じ。

myClassをvolatileにしない場合のスレッドA
while( true ){ 
 MyClass tmp = new MyClass();
 Thread.MemoryBarrier();
 myClass = tmp;



670 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 11:15:28 ]
おまいら詳しいのな

671 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 11:20:35 ]
それもCLR2.0以降では大丈夫でそ。
ついでにその問題を出すなら、Aのメモリバリアだけじゃだめ。

なぜなら、Bスレッドのワーク変数が目的通りに動かないから。
ワーク変数への各アクセスで、新しい参照を読んでしまう危険がある。
かなり直感に反する動作だと思うけど。

結局この場合もvolatileつけるのが最も簡単確実。

672 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 11:58:19 ]
>>671
いや大丈夫でないから.NET2.0で.MemoryBarrier()が追加になってるわけで。

myClassからworkの参照コピーは1回限りのようだから問題ない。
work変数はローカルなんだし、
MyClassはスレッドAでセットしたあとは放置状態なのだから、
途中で新しい参照を読み込むことはありえない。
workは一貫したクラスを参照できてれば、MyClassのバージョンは問わないという前提だよ。

673 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 12:00:37 ]
C# 2.0で質問です。

List<int> _list = new List<int>();

//(本当はintではなくクラスなんですが説明しやすいようにintで・・・)

_list.Add(1);
_list.Add(2);
_list.Add(3);
_list.Add(4);
_list.Add(5);

foreach(int data in _list)
{
 Console.WriteLine(data);
}

このような感じで記述した時に
List<int>はインデックス0からデータを順番に必ず返すのでしょうか?
やってみた感じ必ず返っては来ているようなんですが、保障されているというような感じの文章がヘルプから探せなかったので質問させていただきました。
よろしくお願いいたします。

コレクションやソーテッドリストなんかはその並び順は勝手に変わるようですがListオブジェクトはどうもみあたらない・・・orz

674 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 12:11:22 ]
foreach が配列の要素を走査する順序は、次のように定義されます。
1 次元配列の場合、要素はインデックス 0 から始まってインデックス Length ? 1 で終わるインデックスの昇順に走査されます。
多次元配列の場合、要素は、最初に右端の次元のインデックスが増加し、次にその左側の次元のインデックスが増加し、さらにその左側の次元のインデックスが増加する、というように走査されます。

675 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 12:37:54 ]
>>674
int のコレクションとして考えれば0〜インデックスの最後までの順序で処理される
それでもってListコレクションの中身も同じように処理されるということでしょうか?

ということであればすっきり処理を続けることができます。
ありがとうございました!

676 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 13:09:05 ]
>>672
違うよ。
メモリバリアはCLIの標準仕様では必要。
CLR2.0以降の実装では不要だとしても、互換性の為には必要になる。
だからある。

あとソースコード上はワーク変数に1回だけ取得してても、
実際にはワーク変数を削除して毎回実体にアクセスするという、
直感的でない最適化が行われる可能性があるんだよ。

共有してる変数をvolatileにすればそれを防げる。


677 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 13:11:03 ]
この辺はいつだったかのMSDNマガジンに詳しく書かれてる。


678 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 14:05:33 ]
>>676
ありがと、勉強になった。MSDNマガジンで確かに見た気がするがスルーしてた。



679 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 14:46:29 ]
ごめんもう一つ補足。
CLR2.0以降では書き込みアクセスでのvolatileは事実上不要だけど、
読み取りでは必要な可能性もあったと思う。
書き込み順序と回数はデフォルトでvolatileのように保証されるが、
読み込みは場合によっては省略されることがある。
ただ、その他諸々の事情により、実際に問題が出るパターンはあまりなかったと思う。


680 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 17:20:59 ]
C#からUnmanaged-DLLを利用する場合についての質問です。

DLL側でThread Local Strage(__declspec(thread)を付けた静的変数)を使用し
ている場合、(DLL内の関数がC#から呼び出され)DLL内でこれにアクセスしよう
とした時にSystem.AccessViolationExceptionになるようです。(エラー画面.PNG)
DLL側を修正せずに、C#側の修正もしくは他の手段でこれを回避する方法はあ
りませんでしょうか?

www1.axfc.net/uploader/Sc/so/24967.zip&key=Test
は問題を再現する簡単なコード例です。
Test\MyDll\MyDll.cpp の18行目が__declspec(thread)を付けた静的変数で、
これを、N:\Test\MyCSApp\Program.cs の29行目から呼び出されたMyFunc(5)の
処理でszMyLastErrorにエラー情報をセットするところで例外が発生します。

Test\MyC++App は同じ処理をC++で記述した場合で、これは問題なく動作しま
す。

以上、よろしくお願いいたします。

681 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 17:43:07 ]
>>680
ttp://msdn.microsoft.com/ja-jp/library/2s9wt68x(VS.80).aspx
の一番下

682 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 17:57:52 ]
C++/CLIあたりでlibを使ってラッパ作れば何とかなるかもね

683 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 21:44:03 ]
レスありがとうございます。

>>681
症状からして、そのページに書かれていることが起きている(C#はDLLを動的にローディングしている)
のだろうな、とは思っていたのですが、それを回避する方法がなにかあるのではないかと質問させてい
ただきました。

>>682
MangedなラッパDLLを作成し、これにMyDll.libをリンクしてみましたが、ラッパDLLがC#アプリからは
動的にローディングためか結局ダメでした。

何か、裏技がありませんかねえ??

684 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 21:52:25 ]
別 Exe にしてプロセス間通信するしかないだろ。

685 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 21:57:02 ]
C++/CLIから起動してC#側を動的ロードするとか

686 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 22:23:54 ]
DLLのほうを触っていいならTlsAllocを使えばいいはずだけど。


687 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 23:40:08 ]
COMのアウトプロセスサーバーでラップすると何とかなりそうだが、
激しくめんどい。
インプロセスサーバーだと駄目だった。

688 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 02:56:45 ]
一番現実的なのは>>685だろうな
マネージ側は参照だけでいいんで動的ロードとか言わんけど



689 名前:デフォルトの名無しさん [2009/08/07(金) 08:47:30 ]
.NETのWindowsアプリケーションで作成したプログラムにおいて、
ネットワークPCのドライブにあるフォルダをアクセスしようとした時、
たまたまそのPCが立ち上がっていなくてネットワーク上に見つからない
場合に長く待たされていました。このタイムアウト時間はたぶんOS
の設定で変えられるものとは思うのですが、タイムアウトにならない
うちにプログラムでアクセスを中断してしまうことは可能でしょうか?

690 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 10:09:55 ]
C#でパケットキャプチャしたいのですが、サンプルありますか?

691 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 10:18:07 ]
www.stackasterisk.jp/tech/program/howtosniff01_01.jsp
sourceforge.net/projects/sharppcap/files/SharpPcap/

692 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 11:42:39 ]
>>691
ども、でもなんかよくわからないです
エラー 2 型または名前空間名 'NetDefineSet' は名前空間 'StackAsterisk' に存在しません。アセンブリ参照が不足しています。
とか

693 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 12:04:49 ]
お前にはまだ早いということだね

694 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 12:16:19 ]
>>689
別スレッドでチェックしに行って適当にタイムアウトとかできるんじゃ?

695 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 13:22:57 ]
>>692
そういやなんかサンプルそのままじゃビルドできなかった記憶があるな

>The Code Projectによいサンプルがあったので拝借させていただき、それを元に書いてみました。
>元となったのは 「RawSocket Class-Create Network Monitoring (Packet Sniffing) Apps」 というものです。

って書いてあるしそっちも参考にするといい

696 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 14:39:34 ]
スレッド分けるのに一票

697 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 14:49:45 ]
Process.Start()で存在しないフォルダを起動したら、FileNotFoundExceptionじゃなくてSystem.ComponentModel.Win32Exceptionというのが来る
Frameworkが吸収するところじゃないのか

698 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 15:34:45 ]
あなたはそれがいいと思うかもしれないが、
大多数の他人はそう思わない



699 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 16:48:15 ]
いやそうでもない

700 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 16:59:52 ]
Frameworkが吸収すべき所のような気がするけど
実害は無いからとやかく言わない

701 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 17:06:23 ]
>>697
つうかふつうに固まるだろ・・・・
問題はみに行く時に固まるつうのが問題なわけで

なにかボタン押したときにチェック

チェック中ですのダイアログ的なものと共に強制キャンセルボタン

チェック開始(バックグラウンドワーカーでもなんでも)

バックグラウンド終了前にキャンセルされたら
ナックグラウンドワーカー停止

こんなんでいいんじゃね?

成功のときはバックグラウンドの完了イベントかなんかで処理するとか

色々あると思うけど

702 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 17:25:47 ]
Microsoftの決めたことなんだから正しいお

703 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 18:37:58 ]
>>697
吸収してどうしろって?
別プロセスからの例外をプロセス間通信で受け取るの?
それをフレームワークでやれって?

704 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 19:01:23 ]
なん…だと…

705 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 20:19:40 ]
Windowsフォームで質問。

Form2 _form2 = new Form2(_form1);

としたとき、_form2.FormClosedのイベントハンドラで_form1.Close()するコードを書くと、
Form2.OnFormClosed()が何度も呼ばれる(つまりFormClosedイベントが何度も発生する)
ようなんだけど、これは仕様?バグ?

仕様だとしたらどう理解したらいいんだろう?

706 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 20:25:45 ]
OwnerはCloseするときOwnedFormsを全部Closeする
って言えば分かる?

707 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 20:34:10 ]
>>706
そのレベルの話はOK

708 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 20:53:58 ]
普通に再帰呼び出しになってるだけっしょ
止まるのはハンドルが消えるから



709 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 20:59:15 ]
>>708
現象の説明としてはそれでいいと思うんだけど、
俺が聞きたいのはそういうことじゃなくて、それが仕様なのか、
仕様だとしてそれに何らかの意味があるのかってこと。

FormClosedイベントの意味は、「Close()が呼ばれました」ではないはずだよね。

710 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 21:06:03 ]
> FormClosed イベントは、ユーザー、Close メソッド、または Application クラスの Exit メソッドによって
> フォームが閉じられた後に発生します。
「Form.Closeが呼ばれました」でも大体いいんじゃないかな

ま、おいらはMSの人じゃないので意味とか答えられないけど






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<223KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef