DOBON.NETプログラミング道掲示板
HOME
HELP
新規作成
新着記事
ツリー表示
スレッド表示
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
No35218 の記事
■35218
/ )
Re[1]: DataGridViewの行ヘッダーに行番号を表示した時のエラー
□投稿者/ 魔界の仮面弁士
大御所(1475回)-(2022/11/04(Fri) 10:44:35)
■
No35216
に返信(たこさんの記事)
>「System.Configuration.ConfigurationErrorsException: '構成システムを初期化できませんでした。'」
プログラムそのものでは無く、アプリケーション構成ファイルである
exe名.config (開発時は app.config) ファイル、あるいは user.config の
内容に不整合や破損があると、その例外が発生します。
user.config の場所についてはこちら。
https://atmarkit.itmedia.co.jp/fdotnet/dotnettips/558appsettings/appsettings.html
ということで、ログ関連の設定情報に問題があるのでは無いでしょうか。
プロジェクトの構成が分からないので具体的なアドバイスはできませんが、
Log.dll のプロジェクトがあるのなら、確認すべき app.config は Log プロジェクトの app.config ではなく、
exe 側のプロジェクト側の app.cofing のはずです。exe 側の .config に対して、Log プロジェクト用の
エントリーが正しく記録されているかどうかを確認してみてください。
> LogクラスもDispLogも同じLogプロジェクト内で、クラスライブラリ
> DispLogはユーザーコントロールです。
NLog や log4net の類では無く、自作のロギングクラスということだとすると、
第三者には、具体的なアドバイスが難しいかもしれません。
> 呼出し元
> Private Sub DGVDataAdd(workStr As List(Of String()))
> DataGridView1.Rows.Clear()
> On Error GoTo ErrorNext
DataGridView1.Rows.Clear() が呼ばれているという事は、DGVDataAdd メソッドの呼び出し元が
UI スレッド上からの呼び出しであることは保証されているのですよね?
で、引数の List(Of ) は、「別スレッドでも同時に読み書きされる可能性がある」という事でしょうか。
> いろんなスレッドに呼ばれるので、エラーが出て最終的に「On Error Resume Next」を付けました^^;
え?「いろんなスレッドに呼ばれる」のですか?
この実装だと、UI スレッド以外からの呼び出しは NG に見えますが…。
ワーカースレッドから呼ばれることを前提としているのであれば、
DataGridView に対する読み書き部分を取り除く必要があるでしょう。
> System.Threading.Monitor.Enter(workStr)
> Dim ws As List(Of String()) = workStr
> System.Threading.Monitor.Exit(workStr)
> System.Threading.Monitor.Enter(ws)
・ws は、workStr のコピーでは無く、同一インスタンスへの参照ですよね。
Exit 直後に再 Enterをする実装になっているのは何故ですか?
ループ全体を ws で囲って、ループ内では workStr で囲っている理由が分からないです。
(ReaderWriterLock クラスのような事がしたいわけでも無さそうですし…)
・もしも処理によって粒度の異なるロックを用意したいという意図であれば、
ロック範囲のレベルごとに、別々の「Object インスタンス」を設けた方が良いかもしれません。
Private ReadOnly lockObject As New Object()
・UI スレッドで Monitor を扱う場合は、無制限待機になってしまうことを避けるため、
.Enter ではなく、待機上限時間を指定可能な .TryEnter の方が安全かと思います。
(ロック失敗時にアプリケーション例外とするのか、処理を無視するのか、リトライ判定させるかは要件次第…)
違反を報告
Javascriptを有効にしてください
この投稿が掲示板のルールに違反しており、何らかの対処が必要であると思われる場合は、以下のフォームを利用して管理人に報告することができます。
マルチポストの報告は、
返信フォーム
の上にある「マルチポストの報告」リンクをご利用ください。
この機能の悪用は絶対にしないでください。
悪用されたと管理人が判断した場合は、予告なしで厳しい対処がなされる可能性があります。
確認等の目的で、入力されたメールアドレス宛に返信メールが送信される可能性があります。メールの受信ができないメールアドレスは入力しないでください。
下のフォームが使用できない場合は、
メールフォーム
を使って管理人にご報告ください。
お名前(必須)
メールアドレス(必須)
本文(必須)
(違反理由など)
返信
削除キー/
編集
削除
Mode/
通常管理
表示許可
Pass/
HOME
HELP
新規作成
新着記事
ツリー表示
スレッド表示
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
-
Child Tree
-