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

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

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

Re[3]: Common.MISC.HandleArについて


(過去ログ 134 を表示中)

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

■79205 / inTopicNo.1)  Common.MISC.HandleArについて
  
□投稿者/ 初心者 (39回)-(2016/03/15(Tue) 16:54:53)

分類:[.NET 全般] 

Common.MISC.HandleAr(PAL_ERROR ar)について教えてください。

.NET2008で、WindowsCE用のアプリケーションを開発しています。(ハンディターミナルで動かします。)
.NET Compact Framework を使用しています。

以下のエラーが発生しました。
System.ObjectDisposedException
場所 Microsoft.AGL,.Common.MISC.HandleAr(PAL_ERROR ar)
場所 System.W,indows.Forms.ComboBox.get_SelectedIndex()
場所 Sy,stem.Windows.Forms.ComboBox.get_SelectedItem()


ググっても英語サイトしかヒットせず、翻訳を駆使して頑張って読みましたが、
メモリのエラー?という感じでよく分かりません。
ImageListで発生しやすいようですが、使っていません。

やっていることは、ハンディでスキャンした情報を保持し、
その複数データをDataTableに入れてWebServerに渡す、です。
エラーになったデータも、やり直せばエラーなりません。
自環境ではエラーを発生させられていません。

ComboBoxはフォームに1つ置いてあり、ハードコーディングでコンボボックスにアイテムを追加しています。

生成したObjectの破棄忘れが原因かと New している所を見直したのですが
disposeが実装されているものは、書いてあります。(一部除く)

一部というのがDataTableで、使用後にNothingをセットしています。
(disposeは書かなくてもいいと言われたので。。。)
このDataTableは、CompactFrameworkのSysytem.Dataで
System.ComponentModel.MarshalByValueComponentを継承しています。
このDataTableをdisposeしていない事が原因ではないかと疑っているのですが、見当違いでしょうか?

まずは原因究明、そして対策を講じないといけないので、何かヒントなりお知恵を拝借できないでしょうか。
よろしくお願い致します。

引用返信 編集キー/
■79206 / inTopicNo.2)  Re[1]: Common.MISC.HandleArについて
□投稿者/ ito (22回)-(2016/03/15(Tue) 17:24:33)
No79205 (初心者 さん) に返信
> System.ObjectDisposedException
> 場所 Microsoft.AGL,.Common.MISC.HandleAr(PAL_ERROR ar)
> 場所 System.W,indows.Forms.ComboBox.get_SelectedIndex()
> 場所 Sy,stem.Windows.Forms.ComboBox.get_SelectedItem()
わかる部分だけ記載します。
ObjectDisposedExceptionは、Disposeされた...つまり削除済みオブジェクトにアクセスすると発生します。
プログラムのどこか(これには.NET Framework内部での動作も含みます)で、削除済みのオブジェクトにアクセスしているものと思われます。

引用返信 編集キー/
■79210 / inTopicNo.3)  Re[2]: Common.MISC.HandleArについて
□投稿者/ 774RR (389回)-(2016/03/16(Wed) 11:15:29)
既に指摘されているとおり Dispose されたオブジェクトを操作しようとするとこの例外発生だ。
プログラムが既に死亡していることが、結果的に HandleAr のタイミングで判明したってだけなので
この辺を調べても手遅れっつか、原因は HandleAr 近辺ではない例に該当する。

コードが提示されて無いからこれ以上のことは言えないけど
・オブジェクトの保持のしかたが悪くて、結果的に gc された後のオブジェクトを使っている
・明示的に Dispose するタイミングが早すぎる
のどちらかだろう。
修正のためにはこの辺に着眼を置いてプログラム全体のレビューが必要なパターンだ。

引用返信 編集キー/
■79211 / inTopicNo.4)  Re[3]: Common.MISC.HandleArについて
□投稿者/ 初心者 (40回)-(2016/03/16(Wed) 13:49:40)
itoさん、774RRさん、回答ありがとうございます。

コンボボックスを動的に生成しておらず、破棄する処理もないので、メモリクラッシュか?と安易に考えたわけですが。。。
色々と検証した結果、ユーザーの操作により、この現象が発生することがわかりました。

ハンディターミナルのファンクションキーに
F1:画面を閉じる
F4:登録処理
を割り当てているのですが、
F4キーを押下して登録処理の実行中に「F1キー押下」すると画面が閉じてしまい、登録処理で画面の値を取得するところで「オブジェクトが無い」と言われると。
お二人のご指摘通り、オブジェクトが無かったわけです。
何とかエラーを再現させることができまして、イベントの制御を行うことで、エラーの回避ができそうです。

オブジェクトが無くなるわけがないという思い込みで詰まってましたが、
HandleArではなく、ObjectDisposedExceptionに着目すべき、というご意見を頂いて解決することができました。

どうもありがとうございました。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -