백그라운드 작업자를 사용하여 sqlserver의 일부 테이블을 업데이트하고 있습니다. progressbar max가 올바른 값으로 설정되고 progressbar 값이 증가되고 backgroundworker progresschanged가 올바른 값으로 올바르게 호출되지만 바는 진행되지 않습니다.백그라운드 작업자를 사용하여 진행 표시 줄을 진행하지 않습니다.
여기 background_dowork 메서드에 형태의 코드가 있습니다. 올바른 값으로 작동하는 updateProgressBarValue를 호출하는 루프가 있습니다. 여기
public InterfaceConvertLonLat()
{
InitializeComponent();
Shown += new EventHandler(Form1_Shown);
backgroundWorker1.WorkerReportsProgress = true;
backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
}
public void ConvertLonLat_Load(object sender, EventArgs e)
{
}
public void updateProgressBarValue()
{
progressBar1.Value++;
backgroundWorker1.ReportProgress(progressBar1.Value);
}
public void setProgressBarMax(int max)
{
progressBar1.Maximum = max;
MessageBox.Show("setprogressbarmax " + max);
}
public void Form1_Shown(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
public void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
convert.OSGB36ToWGS84("paf");
}
public void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
이 updateprogressbarvalue를 호출하는 다른 클래스에 포함 된 루프,이 해고되고 있으며 명시된 backgroundworker1_progressChanged 해고 그러나되었던대로 막대가 이동되지 않습니다.
con.setProgressBarMax(address.Tables[0].Rows.Count);
foreach (DataRow LonLat in address.Tables[0].Rows)
{
con.updateProgressBarValue();
Double lon = 0;
Double lat = 0;
lat = Convert.ToDouble(LonLat["LTO"]);
lon = Convert.ToDouble(LonLat["LGO"]);
LocalToWGS84(ref lat, ref lon, OGB_M);
cmd1.Parameters["@LTW"].Value = lat;
cmd1.Parameters["@LGW"].Value = lon;
string dbQuery1 = "update " + tableName + " set LTW = @LTW, LGW = @LGW";
cmd1.CommandText = (dbQuery1);
cmd1.CommandType = CommandType.Text;
cmd1.Connection = conn;
cmd1.ExecuteNonQuery();
}
}
catch (Exception e)
{
MessageBox.Show("error converting: " + e.Message);
}
finally
{
conn.Close();
}
DoWork 내부에서'ReportProgress' 또는'updateProgressBarValue'를 호출하지 않습니까? – Tudor
'DoWork' 메소드와'updateProgressBarValue' 메소드 사이에 어떤 연결도 보이지 않습니다. – Tudor
저는 그 방법입니다 convert.OSGB36ToWGS84 ("paf")는 updateprogressbarvalue를 호출하는 클래스 내 다른 클래스에 있습니다 –