掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VB以外のDLLでメール受信の最中に、メール受信に関するすべての処理を強制終了するには? (ID:123486)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
すみません。 私の説明が要領を得ないために、回答をして頂くのに混乱を招いている感じですね。 > 〜 >> 1.メール受信時のコールバック関数で受信キャンセルを有効にしてForm2を×ボタンで閉じる >…のように読めたんだけど? >> 3.受信処理が終了してユーザーキャンセルが認識される >この説明だと受信キャンセル処理は正常に終了してるように聞こえる。 はい、受信のキャンセルは正常に終了します。でもこれがタイムリーではないんです。 id_rsa+さんがおっしゃるように、コールバック関数の値はグローバルフラグで値を 切り替えて、キャンセルかそうでないかを判断させています。 で、グローバルフラグにキャンセルを設定してすぐさまForm2を閉じると、 コールバック関数により受信がキャンセルされるまでタイムラグがあるために、 Form2が閉じられた後にキャンセルが認識されて、既に閉じられているForm2内のエラーメッセージ が表示される訳です。 >> 4.ユーザーキャンセル時に呼ばれるエラーメッセージ表示のためのサブルーチンが呼ばれる >このサブルーチンは当然VB側のもの。そこでエラーが出るなら呼ばなきゃいい >…って解釈にしかならないと思いますが…。 わかりました。Form2が閉じられていたら、受信キャンセル後のエラーメッセージは呼ばないという 処理を加えればいいということですね。 >[BSMTP DLL] >http://www.hi-ho.ne.jp/babaq/bsmtp.html >受信バイト数確認やキャンセルができます >って書いてあるのは受信途中での正常キャンセルの事では無いんだ??? いえ、正常キャンセルのことを言っています。(はずです) ただ上述しましたように、タイムリーではないということですね。 メールを受信している最中に「受信停止」ボタンでグローバルフラグをキャンセル 有効に切り替えても、メールのサイズが小さくて受信の速度が速いと、受信箱から 全部受信してしまったりします。 (これは仕方ないのかな?) >>押されたらTimerを起動して終了作業を行い、その後にForm2を閉じる >>という方法ではどうかなと思いましたが、 >いや、そこは QueryUnload だけのサンプルなんてヘルプ見れば >いいだけなんだから過去ログ検索『アンロード』で QueryUnload >に辿り着く紹介で適当な過去ログが無かったからであって Timer >は別に重要じゃないよ(^^;)知ってらしたようなので意味無かったです。 はい、わかました。 ところで現在では応急処置として、一連の受信およびデータベースへの書き込み作業が 終了するまで、QueryUnloadや「閉じる」ボタンは無効にし、すべてが済んでから Form2を閉じれるようにしています。 id_rsa+ さんへ >受信途中で×が押されたとき、 > >QueryUnloadイベント内で、 > グローバルなフラグを立てる > フォームのUnloadをキャンセルする > フォームを非表示にする。 > >コールバック内でグローバルなフラグを見て、受信をキャンセル。 >エラーメッセージ表示のためのサブルーチンが呼ばれる >フォームをUnloadする。 はい、だいたいそのような流れです。 グローバルなフラグは、「停止」ボタンクリック時にキャンセル有効の値を 設定していました。 その直後にForm2を閉じると、これまで話しているような結果になるので、Unloadを キャンセル→フォームを非表示→エラーメッセージ表示or非表示 とうことになりますでしょうか。 長くなりますので、別記事であと書きます。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.