daniyaltjm
شنبه 24 مهر 1395, 19:18 عصر
سلام، اشکال این کدها چیه چرا Theredها با هم تداخل میکنن؟! من می خوام در واقع هر وقت کاراکتری توی تکست باکس زده شد و در همین هنگامی که داده ها دارن واکشی میشن فقط یک circularProgress بچرخه و زمانی که کار BackGroundWorker تمام شد توی رویداد RunWorkerCompleted اون circularProgress دیگه نمایش داده نشه ولی ظاهرا گیر میده که تداخل میکنه با ترد قبلی !! کد های چک کردن هم گذاشتم ولی نمی دونم مشکل از کجاست؟:متفکر:
البته این کار رو با تایمر شبیه سازی کردم ولی می خوام دقیق انجام بشه ممنون.
private void backgroundWorkerSe_DoWork(object sender, DoWorkEventArgs e)
{
if (backgroundWorkerSe.CancellationPending)
{
e.Cancel = true;
Return;
}
else
{
SearchWords("select En_Text,Per_Text,Per_Means,Type from Words where En_Text like @En_Text order by En_Text asc ");
circularProgress1.Invoke(new Action(() =>
{
circularProgress1.IsRunning = true;
}));
}
}
private void radTextBoxSearch_TextChanged(object sender, EventArgs e)
{
if (!backgroundWorkerSe.IsBusy)
{
backgroundWorkerSe.RunWorkerAsync();
}
else
{
backgroundWorkerSe.CancelAsync();
}
}
private void backgroundWorkerSe_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
circularProgress1.Invoke(new Action(() =>
{
circularProgress1.IsRunning = false;
}));
}
public void SearchWords(string strcm)
{
try
{
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Daniyal\Documents\Visual Studio 2013\Projects\Dani_ProDic\Dani_ProDic\Dic.mdb");
OleDbDataAdapter da = new OleDbDataAdapter(strcm, con);
da.SelectCommand.Parameters.AddWithValue("@En_Text", radTextBoxSearch.Text + "%");
DataTable dt = new DataTable();
da.Fill(dt);
radGridViewWords.DataSource = dt;
radGridViewWords.Columns[0].HeaderText = "کلمه";
radGridViewWords.Columns[1].HeaderText = "معنی";
radGridViewWords.Columns[2].IsVisible = false;
radGridViewWords.Columns[3].IsVisible = false;
textBoxTotalMeans.Text = radGridViewWords.CurrentRow.Cells[2].Value.ToString();
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
البته این کار رو با تایمر شبیه سازی کردم ولی می خوام دقیق انجام بشه ممنون.
private void backgroundWorkerSe_DoWork(object sender, DoWorkEventArgs e)
{
if (backgroundWorkerSe.CancellationPending)
{
e.Cancel = true;
Return;
}
else
{
SearchWords("select En_Text,Per_Text,Per_Means,Type from Words where En_Text like @En_Text order by En_Text asc ");
circularProgress1.Invoke(new Action(() =>
{
circularProgress1.IsRunning = true;
}));
}
}
private void radTextBoxSearch_TextChanged(object sender, EventArgs e)
{
if (!backgroundWorkerSe.IsBusy)
{
backgroundWorkerSe.RunWorkerAsync();
}
else
{
backgroundWorkerSe.CancelAsync();
}
}
private void backgroundWorkerSe_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
circularProgress1.Invoke(new Action(() =>
{
circularProgress1.IsRunning = false;
}));
}
public void SearchWords(string strcm)
{
try
{
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Daniyal\Documents\Visual Studio 2013\Projects\Dani_ProDic\Dani_ProDic\Dic.mdb");
OleDbDataAdapter da = new OleDbDataAdapter(strcm, con);
da.SelectCommand.Parameters.AddWithValue("@En_Text", radTextBoxSearch.Text + "%");
DataTable dt = new DataTable();
da.Fill(dt);
radGridViewWords.DataSource = dt;
radGridViewWords.Columns[0].HeaderText = "کلمه";
radGridViewWords.Columns[1].HeaderText = "معنی";
radGridViewWords.Columns[2].IsVisible = false;
radGridViewWords.Columns[3].IsVisible = false;
textBoxTotalMeans.Text = radGridViewWords.CurrentRow.Cells[2].Value.ToString();
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}