-1

いくつかの請求書を発行し、プログレスバーを表示/更新し、いくつかの値を休止状態のクラスに保存する必要があるクラスに問題があります。以下のコードは、WyemitujFakture を呼び出してプログレス バー ウィンドウを表示する関数を示しています。

             private void BtOK_Click(object sender, EventArgs e)
              {
                lista.Add(2);
                lista.Add(8);
                liczbaWygenerowach = 0;
                ilosc_zrobionych = 0;
                fpb = new FrmProgressBar("Emisja faktur potwierdzonych, proszę czekać...");
                fpb.Show();
                Application.DoEvents();
                WyemitujFakture(lista);
                fpb.Close();
              }

Windows フォームに進行状況バーが表示され、請求書が生成されますが、nHibernate クラスから値を保存できません。次の行のように見えます: fs.Save(); および Session.Flush(); 動作しない。この問題を解決する方法を知っていますか?

private void WyemitujFakture(List<int> lista)
 {
 foreach (int knh_id in lista)
  {
try
{
    if (luk.Count > 0)
    {
        FakturySprzedazy fs = new FakturySprzedazy();
        fs.FKS_AKCYZA = false;
        fs.FKS_CZY_KLON = false;
        fs.FKS_DATA_DOW_KS = Convert.ToDateTime(MTBDataZapisuDoFK.Text);
        fs.FKS_DATA_FAKTURY = Convert.ToDateTime(MTBDataFaktury.Text);
        fs.FKS_DATA_SPRZEDAZY = Convert.ToDateTime(MTBDataSprzedazy.Text);
        fs.Save();
        Session.Flush();
        liczbaWygenerowach++;
    }

}
catch (Exception ex)
{
    MessageBox.Show("Nie mozna wyemitowac faktury dla kontrahenta o id = " + knh_id.ToString() + " " + ex.Message);
}
ilosc_zrobionych++;

fpb.PBStan.Value = (int)((100 * ilosc_zrobionych) / liczbaKontrahentow);
Application.DoEvents();
 }
 }

事前に助けてくれてありがとう

4

1 に答える 1

1

親愛なるクレイグ・リンガーへ

あなたの素早い反応に感謝します。エラーメッセージは表示されず、postgresql のバージョンは 9.1 です。

私は解決策を見つけました:)

関数 "WyemitujFakture" はスレッド内にあるため、メイン スレッドで作成された SessionScope オブジェクトにアクセスできません。関数 WyemitujFakture に 4 行追加しました。

SessionScope session2 = new SessionScope(FlushAction.Never);
                    fs.Save();
                    session2.Flush();
if (session2 != null) session2.Dispose();

上記の4行で問題が解決しました。以下に、適切に機能する関数全体を添付しました。

private void WyemitujFakture(List<int> lista)
{
foreach (int knh_id in lista)
{
 try
{
if (luk.Count > 0)
{
    FakturySprzedazy fs = new FakturySprzedazy();
    fs.FKS_AKCYZA = false;
    fs.FKS_CZY_KLON = false;
    fs.FKS_DATA_DOW_KS = Convert.ToDateTime(MTBDataZapisuDoFK.Text);
    fs.FKS_DATA_FAKTURY = Convert.ToDateTime(MTBDataFaktury.Text);
    fs.FKS_DATA_SPRZEDAZY = Convert.ToDateTime(MTBDataSprzedazy.Text);
    SessionScope session2 = new SessionScope(FlushAction.Never);
                    fs.Save();
                    session2.Flush();
   session2.Flush();


   if (session2 != null) session2.Dispose();
   Session.Flush();
    liczbaWygenerowach++;
}

}
catch (Exception ex)
{
MessageBox.Show("Nie mozna wyemitowac faktury dla kontrahenta o id = " + knh_id.ToString() + " " + ex.Message);
}
ilosc_zrobionych++;

fpb.PBStan.Value = (int)((100 * ilosc_zrobionych) / liczbaKontrahentow);
Application.DoEvents();
}
}

ご婚約ありがとうございました!!!!

よろしくお願いします!!!!

于 2012-09-17T12:32:46.493 に答える