Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
Excel生成時にProgressBarを使って進捗状態を把握したい
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30460#CommentId83820
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2020/3/12 15:06:18
> ローカルで宣言してるためでしょうか?
『ローカル変数』だけを使うのであれば安全です。しかし、
『フィールド変数』をスレッド間で共有することは避けてください。
同一スレッド間であれば、フィールド変数を共有してもまったく問題ありませんが
複数のスレッドから同じフィールド変数を同時に読み書きするのは原則 NG です。
どうしても共有するなら、同時実行制御の仕組みを設けて、書き込み完了まで
他スレッドの読み取りを完全にロックするなど、排他制御をしっかり組み込む必要があります。
処理を分割できる場合は、Task(Of 進捗状況) を戻り値とする Async Function にして
それを繋いで処理するか、もしくは、Progress(Of 進捗状況) 型を利用する方法が使えます。
https://docs.microsoft.com/ja-jp/dotnet/api/system.progress-1
http://outside6.wp.xdomain.jp/2016/07/25/post-91/
あるいは先の例のように、BackgroundWorker などのイベントベースの通知機構を用いるとか、
もしくはワーカースレッドから Invoke メソッドを通じて実行させるという手もあります。
http://blog.livedoor.jp/gab_km/archives/765026.html
もしい¥ BackgroundWorker を使う場合は、過去に何度か注意点を
投稿していたと思うので、過去ログを検索してみてください。