前提・実現したいこと
お世話になっております。C#でwhileループ文を作ったのですが
規定回数を到達してもループから抜け出せません。
どこかおかしいところがあるのでしょうか。
発生している問題・エラーメッセージ
エラーメッセージなし
該当のソースコード
private void bgwSendWorker_DoWork(object sender , doworkeventarg e) { string[]strXMLFullPath sAddListBox("開始") int i= 0; while (bgwSendWorker.CancellationPending == false) { i++ if (i <2) gWriteMessage(cMessage_Send_wait); if (bgwSendWoker.CancellationPending) { e.Cancel = true; return; } string strXml =GXpathFO(); SetFileList(strXml); if (GetFileList(out str strFullPath)==true) { sAddListBox("データあり"+ strXMLFullpath"件"); foreach (string xmlpath in strXMLFullpath){ mainlogic(xmlpath); if (bgwSendWorker.CancellationPending) { e.Cancel = true; return; } } }
試したこと
intの位置やif文を変えてみたりしましたが特に変化はなく抜ける処理になりませんでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
動くコードを書いてください。
> 規定回数を到達してもループから抜け出せません
規定回数も到達もその条件判断もコードからは意味不明です。
解るように書いてください。
一つあるwhile文の条件にある、
bgwSendWorker.CancellationPending == false
にtrueを設定する記述がないので現状では無限ループになりますね。
「規定回数に到達したらループから抜ける」という処理は、提示されたコードのどの部分でしょうか?
恐らくバックグラウンドワーカーを使って上位から動かしているのだと思いますが、そうだとするとその上位でCancel相当の操作をするはずです。
それらのコードも無いと分からないでしょう。あと、bgwSendWorker_DoWork(object sender , doworkeventarg e) とありますが、これはコンパイルが通るのでしょうか。doworkeventargはDoWorkEventArgsのはずですが。
スレッドブロックしてるからでしょう。
意味のない「i++; if (i <2)」は何ですか?
何か意味があるなら記載をお願い致します。