I'm trying to accomplish a simple task, update a progress bar in a Form from a different thread, after more than 4 hour or so of googleing around I'm still not able to master that.. This is my code so far, where I'm getting wrong? can Anyone point me in the right direction?
namespace ImageLoader
{
public partial class Form1 : Form
{
BackgroundWorker bgw = new BackgroundWorker();
public Form1()
{
InitializeComponent();
bgw.DoWork += new DoWorkEventHandler(bgw_DoWork);
bgw.ProgressChanged += new ProgressChangedEventHandler(bgw_ProgressChanged);
bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgw_RunWorkerCompleted);
bgw.WorkerReportsProgress = true;
}
private void button1_Click(object sender, EventArgs e)
{
bgw.RunWorkerAsync();
}
void bgw_DoWork(object sender, DoWorkEventArgs e)
{
Excel.Worksheet activeWorksheet = ((Excel.Worksheet)Globals.ThisAddIn.Application.ActiveSheet);
bool test = false;
bool testStr = false;
int urlsColPos = 0;
int imgColPos = 0;
object result;
object result2;
result = textBox1.Text;
result2 = textBox2.Text;
string urlValidi = "http";
if (result == "" || result2 == "")
{
MessageBox.Show("Uno dei due campi non è stato valorizzato, compilare entrambi i campi prima di continuare.");
test = false;
}
else
{
urlsColPos = char.ToUpper(Convert.ToChar(result)) - 64;
imgColPos = char.ToUpper(Convert.ToChar(result2)) - 64;
var s1 = (activeWorksheet.Cells[2, urlsColPos] as Excel.Range).Value.ToString();
var s2 = (activeWorksheet.Cells[2, imgColPos] as Excel.Range).Value;
testStr = s1.Contains(urlValidi);
if (testStr == false)
{
MessageBox.Show("La colonna specificata per l'origine URLs non contiene URL validi");
}
if (s2 != null)
{
MessageBox.Show("La colonna dove inserire le immagini non è vuota");
}
if (testStr == true && s2 == null)
{
test = true;
}
}
if (test == true)
{
HttpWebResponse response = null;
Excel.Range range = activeWorksheet.UsedRange;
double lastRow = range.Rows.Count;
activeWorksheet.Rows.RowHeight = 62;
activeWorksheet.Columns.ColumnWidth = 12;
for (var i = 2; i <= lastRow; i++)
{
Application.DoEvents();
Microsoft.Office.Interop.Excel.Range oRange = (Microsoft.Office.Interop.Excel.Range)activeWorksheet.Cells[i, imgColPos];
//const float ImageSize = 45;
float Left = (float)((double)oRange.Left + 2);
float Top = (float)((double)oRange.Top + 1);
var imgUrl = (string)(activeWorksheet.Cells[i, urlsColPos] as Excel.Range).Value;
int ultimaRiga = (int)lastRow;
int percents = (i * 100) / ultimaRiga;
//progressBar1.Step = 1;
//progressBar1.Value = i;
bgw.ReportProgress(percents, i);
try
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(imgUrl);
request.Method = "GET";
response = (HttpWebResponse)request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
byte[] imgData = new WebClient().DownloadData(imgUrl);
MemoryStream imgStream = new MemoryStream(imgData);
Image img = Image.FromStream(imgStream);
float wSize = img.Width;
float hSize = img.Height;
if (hSize > wSize) //Verticale
{
activeWorksheet.Shapes.AddPicture(imgUrl, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue, Left + 14, Top, 40, 60);
}
else
{
activeWorksheet.Shapes.AddPicture(imgUrl, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue, Left + 3, Top + 10, 60, 40);
}
Application.DoEvents();
//Console.Write(sr.ReadToEnd());
}
catch (WebException f)
{
activeWorksheet.Cells[i, 10] = "Errore Server Remoto Nuxie";
}
finally
{
response.Close();
}
}
this.Close();
}
}
void bgw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
return;
}
}
}