Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# d:_C#_.net_Winforms_Asynchronous - Fatal编程技术网

C# d:

C# d:,c#,.net,winforms,asynchronous,C#,.net,Winforms,Asynchronous,我假设异步调用该方法的唯一原因是能够在处理WyemitujFakture-方法期间更新UI。使用Application.DoEvents()不需要异步调用: fpb = new FrmProgressBar("Please wait...."); fpb.Show(); Application.DoEvents(); WyemitujFakture(lista); fpb.Close(); 在调用fpb.Show()之后,应该调用Application.DoEvents(),以便正确显示表单。

我假设异步调用该方法的唯一原因是能够在处理
WyemitujFakture
-方法期间更新UI。使用
Application.DoEvents()
不需要异步调用:

fpb = new FrmProgressBar("Please wait....");
fpb.Show();
Application.DoEvents();
WyemitujFakture(lista);
fpb.Close();
在调用
fpb.Show()
之后,应该调用
Application.DoEvents()
,以便正确显示表单。此外,还应该在方法本身而不是构造函数中实例化表单,因为在调用
fpb.Close()
(它将被释放)后,不能再次使用同一实例

然后,您可以在
WyemitujFakture
方法中更新进度条:

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);
                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();
    }
}
private void WyemitujFakture(列表A)
{
foreach(列表中的int knh_id)
{
尝试
{
如果(luk.Count>0)
{
FakturySprzedazy fs=新的FakturySprzedazy();
fs.FKS_AKCYZA=假;
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);
liczbaWygenerowach++;
}
}
捕获(例外情况除外)
{
MessageBox.Show(“Nie mozna wyemitowac faktury dla kontrahenta o id=“+knh_id.ToString()+”+ex.Message);
}
ilosc_zrobionych++;
fpb.PBStan.Value=(int)((100*ilosc_zrobionch)/liczbaKontrahentow);
Application.DoEvents();
}
}

这是一个非常麻烦的代码。如果仍然存在问题,请重写以使用BackgroundWorker并重新发布。不是这样,可以从worker读取Text属性。没有写。再一次您好,我检查了您的提示,进度条工作正常,您的评论帮助我了解出了什么问题。再次感谢你,祝你有一个美好的一天!!!问候
using System;
using System.Collections.Generic;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Npgsql;
using Castle.ActiveRecord;
using WFR.Model;
using System.Threading;

namespace Faktury_i_Rachunki_2.Forms
{

    public partial class FrmEmisjaFakturPotwierdzonych : FrmBaseForm
    {

        private ArrayList listaSposobowZaplaty;
        public List<int> lista;
        private int liczbaWygenerowach;
        private int liczbaKontrahentow;
        private int ilosc_zrobionych;
        private FrmProgressBar fpb;

        public delegate void BinaryDelegate(List<int> knh_id);


        public FrmEmisjaFakturPotwierdzonych()
        {
            InitializeComponent();
    fpb = new FrmProgressBar("Please wait....");
        }

        private void BtOK_Click(object sender, EventArgs e)
        {                
                BinaryDelegate b = new BinaryDelegate(WyemitujFakture);

                    lista.Add(12);
                    lista.Add(13);
                    lista.Add(17);
                    lista.Add(1);

                liczbaKontrahentow = lista.Count;
                if (TBRejestr.Text.Trim() != "")
                {

                    if (liczbaKontrahentow > 0)
                    {
                        liczbaWygenerowach = 0;
                        ilosc_zrobionych = 0;
                        WyemitujFakture(lista);
              IAsyncResult theAsRes = b.BeginInvoke(lista, new AsyncCallback(AddComplete), "THX");

                        fpb.Show();
                        while (ilosc_zrobionych != liczbaKontrahentow)
                        {
                            fpb.PBStan.Value = (int)((100 * ilosc_zrobionych) / liczbaKontrahentow);
                        }
                        fpb.Close();
                    }

                    try
                    {
                        MessageBox.Show("Wygenerowano " + liczbaWygenerowach.ToString() + " faktur");
                    }
                    catch
                    {
}

        }
}
        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);
                        liczbaWygenerowach++;
                    }

                }
                catch (Exception ex)
                {
                    MessageBox.Show("Nie można wyemitować faktury dla kontrahenta o id = " + knh_id.ToString() + " " + ex.Message);
                }
                ilosc_zrobionych++;
            }
        }
MTBDataZapisuDoFK.Text
fpb.Show();
while (ilosc_zrobionych != liczbaKontrahentow)
{
    Application.DoEvents();
    fpb.PBStan.Value = (int)((100 * ilosc_zrobionych) / liczbaKontrahentow);
}
fpb.Close();
fpb = new FrmProgressBar("Please wait....");
fpb.Show();
Application.DoEvents();
WyemitujFakture(lista);
fpb.Close();
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);
                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();
    }
}