이것이 StackOverflow 포럼의 첫 번째 게시물이므로 매우 관대하십시오. 동기식으로 호출되는 함수에 문제가 있지만 비동기식으로 호출되지 않습니다. 당신은 내가 송장 번호의 이름 issueInvoices 목록을 작동하려면 목록을 통과 루프에서 내가 어떤 송장을 작성 볼 수 있듯이함수는 동 기적으로 호출 될 때 작동하지만 비동기 적으로 호출 될 때는 작동하지 않습니다.
private void issueInvoices(List<int> lista)
{
foreach (int knh_id in lista)
{
Invoice fs = new Invoice();
fs.FKS_AKCYZA = false;
fs.FKS_CZY_KLON = false;
fs.FKS_DATE = Convert.ToDateTime(MTBDataZapisuDoFK.Text);
fs.NUMBER = knh_id);
}
}
: 당신 아래 은 동 기적으로 호출 된 함수를 찾을 수 있습니다. 이 함수는 제대로 작동하지만 비동기 적으로 (진행률 표시 줄을 표시하기 위해) 호출하려고하면 함수가 fs.FKS_DATE 객체 dateTime에 할당 할 수 없습니다. 정적 함수 "Convert.ToDateTime"이 제대로 작동하지 않는 것 같습니다. 그러나
public delegate void BinaryDelegate(List<int> knh_id);
BinaryDelegate b = new BinaryDelegate(issueInvoices);
IAsyncResult theAsRes = b.BeginInvoke(lista, new AsyncCallback(AddComplete), "Thx U!");
FrmProgressBar fpb=new FrmProgressBar(“Please wait…”);
fpb.Show();
/* below i check how many operation i have to do, if all operations are done, then I close fpb window, program is updating progres bar and in thread make operation issueInvoices*/
while (ilosc_zrobionych != liczbaKontrahentow)
{
fpb.PBStan.Value = (int)((100 * ilosc_zrobionych)/liczbaKontrahentow);
}
fpb.Close();
가 좀 중단 점을 넣어 기능 issueInvoices가 비동기 적으로 호출되는 코드 아래에 모습을 ... 가지고 가고 라인에서 프로그램을 stoping처럼 보이는하십시오, 그것은 날짜에 Conver 유럽 수 있습니다,하지만 난 기적이 작업을 수행 할 때, 그것은 작동 어떤 오류도없이. fs.FKS_DATE = Convert.ToDateTime (MTBDataZapisuDoFK.Text); 이 문제를 해결할 수있는 방법과 해결 방법은 무엇입니까? 미리 답변 해 주셔서 감사합니다. 아래
은 학급 전체 비동기이라고 : 한 배경 스레드에서 UI 컨트롤을 액세스
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++;
}
}
이 매우 귀찮은 코드입니다. BackgroundWorker를 사용하도록 다시 작성하고 문제가 계속되면 다시 게시하십시오. –