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

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

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

全過去ログを検索

<< 0 >>
■60563  Re[3]: スプレッドとCSV出力について
□投稿者/ ある -(2011/07/08(Fri) 16:24:16)
    みなさんお返事ありがとうございます。

    今回は普通にコレクション中のデータを、CSVファイルにPrint関数で書き込みを行いました。
記事No.60470 のレス / END /過去ログ101より / 関連記事表示
削除チェック/

■101098  IF文終了後にElseに飛んでしまう
□投稿者/ ゆうたろう -(2023/01/06(Fri) 17:32:15)

    分類:[.NET 全般] 

    お世話になります。
    当方VB.net(VS2015 .Net4.5.1)で開発をしております。

    DGVからデータを読み込み、読み込み後には完了マークを付ける
    というプログラムがあるのですが、
    未読み込みのデータのみ表示させた上で、2つ以上同時に読み込ませるとエラーが起きました。
    全てのデータを表示させて読み込ませるとうまくいきます。

    不具合の該当箇所はこちらです

     If ret Then '途中で処理をキャンセルされるとretがFalseに

    (〜ここで処理列の読み込みフラグをTrueに〜)

      frmResult.setSuccessStep()
     Else
      Throw New Exception(中断されたデータ)
     End If

    この処理を読み込む列の回数繰り返すという全体の処理になっていますが、
    Trueで進みEnd IFまで進み、ステップ実行をすると、Throw New Exceptionに進みます。
    このときretはTrueのままでした。

    @条件式がTrueなのにElseを通っているということでしょうか?
    AなぜElse自体を通らずその下に直接行くのでしょうか
    Bおそらく読み込みフラグをTrueに変える処理と、読み込み済みは表示しない処理の兼ね合いでのエラーだと思うのですが、非同期処理でもないのに同時進行でかかわってくることはあり得るのでしょうか?

    拙い説明で申し訳ありませんが、何か解決の糸口になりそうなことがあれば
    お教えいただければ幸いです。
親記事 /過去ログ176より / 関連記事表示
削除チェック/

■101100  Re[1]: IF文終了後にElseに飛んでしまう
□投稿者/ 魔界の仮面弁士 -(2023/01/06(Fri) 17:58:56)
    2023/01/06(Fri) 18:23:01 編集(投稿者)

    No101098 (ゆうたろう さん) に返信
    > 未読み込みのデータのみ表示させた上で、2つ以上同時に読み込ませるとエラーが起きました。
    このエラーとは「Throw New Exception(中断されたデータ)」のことですか?


    > 全てのデータを表示させて読み込ませるとうまくいきます。
    DataSource なしの DataGridView に、直接値を書き込んでいるのでしょうか。
    それとも、バインドしている DataTable に保持させているのでしょうか。
    (セルに直接書き込むのは、パフォーマンス的にあまり望ましくはありません)

    DataTable をバインドしているのであれば、データの書き込みは DataGridView に対してではなく、
    バインド先の DataTable あるいは BindingSource に対して行うのが望ましいです。


    >  If ret Then '途中で処理をキャンセルされるとretがFalseに
    その ret はどこで宣言されていますか?

    ローカル変数ではなくフィールド変数であり、
    他のイベントによって書き換えられる、ということでしょうか。

    同じ変数を複数のスレッドから書き換えていたりはしないですよね?
    (たとえば、BackgroundWorker からフィールド変数を書き換えているなど)


    >  Else
    >   Throw New Exception(中断されたデータ)
    >  End If
    流石に、素の Exception を Throw するのは如何なものかと思いますよ。
    Catch しにくくなりますので、面倒がらずに独自のカスタム例外を投げましょう。
    (事前定義済みの適切な例外クラスがある場合は、独自例外を設ける必要はありません)

    [標準例外型の使用]
    https://learn.microsoft.com/ja-jp/dotnet/standard/design-guidelines/using-standard-exception-types


    [例外の推奨事項]
    https://learn.microsoft.com/ja-jp/dotnet/standard/exceptions/best-practices-for-exceptions


    > このときretはTrueのままでした。
    不要部分を削ぎ落した、現象を再現できる最低限の実験コードまたはサンプルを提供できますか?
    その場合、Option Strict を On にした状態でコンパイルが通る状態であることが望ましいです。


    > @条件式がTrueなのにElseを通っているということでしょうか?
    通常は起きないですね。

    もしもマルチスレッドであれば、If を通過した時点では True だったものが、
    Throw 時点で False になってしまうことはありますが、そういうケースでは、
    排他制御処理を伴った設計にするのが普通ですし。
    (マルチスレッドなのに、排他制御無しで書き換えているなら要修正)


    あるいは、デバッグソースが古くなっているとか、プロジェクトの名前やフォルダーの変更などによって、
    実際の実行個所とコードの行が不一致を起こしてしまうというケースが稀にあります。

    たとえば「現在のソース コードは ... に組み込まれたバージョンとは異なっています」
    などの警告が生じているケースがこれに当たります。
    不一致の場合は、ソリューションの「クリーン」を行い、あらためて
    ビルドしなおして改善するかを確認してみてください。

    https://learn.microsoft.com/ja-jp/visualstudio/debugger/troubleshooting-breakpoints?view=vs-2022
記事No.101098 のレス /過去ログ176より / 関連記事表示
削除チェック/

■101099  Re[1]: IF文終了後にElseに飛んでしまう
□投稿者/ ゆうたろう -(2023/01/06(Fri) 17:38:01)
    表示させているプログレスバーだけ非同期かもしれないです。
記事No.101098 のレス /過去ログ176より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -