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

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

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

No.6786 の関連記事表示

<< 0 >>
■6786  Re[5]: Form2からアプリケーション終了
□投稿者/ επιστημη -(2006/09/25(Mon) 07:31:22)
>

    分類:[C#] 

    No6785に返信(chiteさんの記事)
    > Form2の「×」ボタンを閉じるときのイベント発生法が解らなくて困ってます。

    Formが閉じるときのイベントは何? ってことですか?
    OnClosing/OnClosedなんてのがありますが。

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

■6786  Re[3]: 非同期TCP接続
□投稿者/ れい -(2007/08/23(Thu) 20:26:01)
    2007/08/23(Thu) 20:26:20 編集(投稿者)

    No6784 (JJ さん) に返信
    > 今回のアプリではマルチスレッドで
    > 同時にということはないので
    > 問題ないかと考えております。

    それは問題認識が甘いです。
    BeginConnectした時点でマルチスレッドです。
    Callbackはどんなスレッドで呼ばれるのか、保証がありません。
    呼び出し元の場合もあれば、Pooledなスレッドの場合、そうでない他のスレッドの場合もあります。
    ですので、Callbackで変数を使うなら、同期機構をいれないとダメです。

    > 具体例をあげていただけると大変助かります。

    何をしたいのかも明確にわかるので、
    私の持ってるソースを見せれば役に立つだろうと思うのですが。
    今日はいろいろめんどくさいので、手書き+検証無し+うろ覚えで。

    まず、ウェイトだけならCallbackは要りません。
    IAsyncResult.AsyncWaitHandleで待てばいいだけです。
    AsyncWaitHandleは作成にコストがかかる場合もあるので、
    IsCompleteかCompletedSynchronouslyで確認しておくといいです。
    BeginXXXを途中で無理やり閉じると例外を吐くものもあるのでそれも処理します。

    まとめると。
    BeginXXXの一般的タイムアウト指定方法は下記の用になります。

    (手書き+検証無し+うろ覚えにつき注意)
    IAsyncResult iar = tc.BeginConnect(host, portNo, null, null);
    if ( !iar.CompletedSynchronously ) { か if ( !iar.IsCompleted ) {
    if ( !iar.WaitOne(timeoutMSec, false) ) {
    try {
    //ここにCleanupを。
    tc.close();
    } catch {
    }
    Throw New TimeoutException();
    }
    }
    tc.EndConnect(iar);

    IAsyncResultに関しては「非同期プログラミングのデザインパターン」で検索。
    IAsyncResultをきちんと理解しておくと、かなり使えます。

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



<< 0 >>

パスワード/

- Child Tree -