Добрый день! Помогите "не знающему".
Суть вопроса:
Есть база данных, и есть файл с SQL командами. при запуске приложения хотел выполнить их в фоновый поток, а на форму в ProgressBar'е выводить результат. Прочитал статью с "местную" по работе с потоками, но так и не нашел как обратиться к контролу из фоновой задачи. В потоке создаю еще одно подключение, что бы основные функции нормально работали, так как паралельные транзакции не поддерживаются (толи ограничение sql-сервака или Framework'a)
вот код который и работает 50/50, а мне нужно все 100
запуск потока
Thread t = new Thread(SQLScript);
t.Start(DM.Connection.ConnectionString);
код потока
public void SQLScript(Object ConnectionString)
{
if (System.IO.File.Exists(System.IO.Directory.GetCurrentDirectory() + @"\sql\SQLScript.sql") == true)
{
lock (this.toolStripStatusLabel2)
{
this.toolStripStatusLabel2.Text = "Переиндексация таблиц";
}
lock (this.toolStripProgressBar1)
{
this.toolStripProgressBar1.Value = 0;
}
DataModuleClass dm1 = new DataModuleClass();
dm1.Connection = new FbConnection((String)ConnectionString);
dm1.Connection.Open();
dm1.Command = new FbCommand();
dm1.Command.Connection = dm1.Connection;
List<string> reindex = new List<string>();
reindex.AddRange(System.IO.File.ReadAllLines(System.IO.Directory.GetCurrentDirectory() + @"\ReIndexDatabase.sql"));
lock (this.toolStripProgressBar1)
{
this.toolStripProgressBar1.Maximum = reindex.Count;
}
dm1.Command.Transaction = dm1.Connection.BeginTransaction();
for (int i = 0; i < reindex.Count; i++)
{
dm1.Command.CommandText = reindex[i];
dm1.Command.ExecuteNonQuery();
lock (this.toolStripProgressBar1)
{
this.toolStripProgressBar1.Value += 1;
}
}
dm1.Command.Transaction.Commit();
lock (this.toolStripStatusLabel2)
{
this.toolStripStatusLabel2.Text = "простой";
}
}
}
04.12.07 14:36: Перенесено модератором из '.NET' — AndrewVK