2012-10-02 54 views
0

我有一個背景工作程序來處理一些工作,do_work事件中有一個循環,並且從我內部調用reportprogress與計數器,計數器遞增但進度條不移動。如果我使用簡單的循環從1到100調用reportprogress進度條的作品。 對不起ammount的代碼..進度條不起作用

namespace ConvertOSGB_WGS84 
{ 
public partial class InterfaceConvertLonLat : Form 
{ 
    public static Int32 OGB_M = 150; 
    [DllImport("TTDatum3.Dll", EntryPoint = "WGS84ToLocal", CallingConvention = CallingConvention.StdCall, SetLastError = true)] 
    public static extern Int32 WGS84ToLocal([In, Out]ref double lat, [In, Out] ref double lon, Int32 datum); 

    [DllImport("TTDatum3.Dll", EntryPoint = "LocalToWGS84", CallingConvention = CallingConvention.StdCall, SetLastError = true)] 
    public static extern Int32 LocalToWGS84([In, Out]ref double lat, [In, Out] ref double lon, Int32 datum); 

    [DllImport("TTDatum3.Dll", EntryPoint = "OSGB36ToOSGBGrid", CallingConvention = CallingConvention.StdCall, SetLastError = true)] 
    public static extern Int32 OSGB36ToOSGBGrid(double lat, double lon, [In, Out] ref double east, [In, Out] ref double north); 

    [DllImport("TTDatum3.Dll", EntryPoint = "OSGBGridToOSGB36", CallingConvention = CallingConvention.StdCall, SetLastError = true)] 
    public static extern Int32 OSGBGridToOSGB36(double east, double north, [In, Out] ref double lat, [In, Out] ref double lon); 
    CovertLonLat convert = new CovertLonLat(); 


    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 Form1_Shown(object sender, EventArgs e) 
    {  
     backgroundWorker1.RunWorkerAsync(); 
    } 

    public void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
    { 
     MessageBox.Show("backgroundworker"); 
     SqlConnection conn = new SqlConnection(Connections.dbConnection1()); 
     InterfaceConvertLonLat con = new InterfaceConvertLonLat(); 
     SqlCommand cmd = new SqlCommand(); 
     SqlCommand cmd1 = new SqlCommand(); 
     SqlDataAdapter adapter = new SqlDataAdapter(); 
     DataSet address = new DataSet(); 
     int counter = 0; 


     cmd.Parameters.Clear(); 

     if (conn.State.Equals(System.Data.ConnectionState.Closed)) 
     { 
      conn.Open(); 
     } 
     try 
     { 
      adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey; 
      cmd1.Parameters.Add(new SqlParameter("@LTW", SqlDbType.Float)); 
      cmd1.Parameters.Add(new SqlParameter("@LGW", SqlDbType.Float)); 


      string dbQuery = "select * from paf "; 

      cmd.CommandText = (dbQuery); 
      cmd.CommandType = CommandType.Text; 
      cmd.Connection = conn; 
      adapter.SelectCommand = cmd; 
      adapter.Fill(address, "OBG36ToWGS84"); 

      foreach (DataRow LonLat in address.Tables[0].Rows) 
      { 
       counter++; 
       MessageBox.Show("value " + counter); 
       con.backgroundWorker1.ReportProgress(counter); 
       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 paf set LTW = @LTW, LGW = @LGW"; 

       cmd1.CommandText = (dbQuery1); 
       cmd1.CommandType = CommandType.Text; 
       cmd1.Connection = conn; 
       cmd1.ExecuteNonQuery(); 

      } 
     } 
     catch (Exception ex) 
     { 

      MessageBox.Show("error converting: " + ex.Message); 
     } 
     finally 
     { 

      conn.Close(); 

     } 
    } 

    public void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) 
    { 

     progressBar1.Value = e.ProgressPercentage; 
    } 




} 

}

回答

2

這就是問題所在:

InterfaceConvertLonLat con = new InterfaceConvertLonLat(); 
... 
con.backgroundWorker1.ReportProgress(counter); 

不同後臺工作所以你報告進展 - 其中一個關聯採用未示出的形式。只是使用:

backgroundWorker1.ReportProgress(counter); 
+0

你就是這樣,那是因爲從另一個班轉移代碼..謝謝! –

+0

男人你很好喬恩,這就是我要說的! –