私は長い間 .net Web アプリの開発経験がありますが、今日、データベースからのデータに基づいて Excel を作成するための Windows フォーム アプリを作成するように依頼されました。私は Windows フォームの専門家ではありません。
完了し、機能しています。プログラムが応答し続けることができるように、バックグラウンド ワーカーを使用してプログレス バーを追加しました。次に、OrderId に基づいて行の bgcolor を変更したいと思います。
以下を追加しました。
backgroundColor = backgroundColor == Color.White ? Color.WhiteSmoke : Color.White;
このコード行は、私の注文 foreach のすぐ下にあります。私の注文には多くの支払いなどが含まれる可能性があるため、1 つの注文に対して Excel の多くの行のようになります。
BackgroundWorker がなければ、すべてが意図したとおりに機能しますが、それを追加すると、スレッド内にあるため奇妙なことが起こるため、すべてが台無しになります。
私は自分自身をかなり明確にし、この「問題」に対する答えを見つけたいと思っています.
以下はバックグラウンド ワーカーのコードです。この CreateExcel メソッド内には注文に関する foreach がありますが、バックグラウンド ワーカーはスレッド化されており、個別の注文ごとに bgcolor を色付けするロジックが機能していません...
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
Util.CreateExcel(_orders, _fileName, sender as BackgroundWorker, e);
}
いくつかの画像を投稿してみましたが、これにはもっと評判が必要です。
希望する結果は、「ゼブラ」のようなもので、注文ごとに bgcolor が異なります。backgroudworker がなければこれは正常に動作しますが、それを使用すると結果が奇妙になり、一部の注文は他の注文と同じ bgcolor になり、一部の注文は問題ありません。