با سلام دوستان من می خواستم یه مثال برای نحوه پیاده سازی یک thread بزنید البته سرچ کردم اما می خوام اگر بشه یه مثال هم باشه مثلا اگر بخواهیم تعدادی رشته رو با یه threadدر یک listboxاد کنیم چطور باید این کار رو بکنیم
با سلام دوستان من می خواستم یه مثال برای نحوه پیاده سازی یک thread بزنید البته سرچ کردم اما می خوام اگر بشه یه مثال هم باشه مثلا اگر بخواهیم تعدادی رشته رو با یه threadدر یک listboxاد کنیم چطور باید این کار رو بکنیم
باید از Invoke استفاده کنی
private delegate ListViewItem del_AddItem(ListViewItem _Item);
private ListViewItem p_invokeFunctionAddItem(ListViewItem value)
{
ListView1.Items.Add(value);
}
private void p_startThread(ListView _List)
{
del_AddItem g_addItem = new del_AddItem(p_invokeFunctionAddItem);
ListViewItem g_item = new ListViewItem("Hello Guy!!!");
g_item.SubItems.Add("I Add By Invoke");
_List.Invoke(g_addItem,new object[]{g_item});
}
private void Form1_Load(object sender, EventArgs e)
{
System.Threading.Thread g_thread = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(p_startT hread));
می تونید از کامپوننت Backgroundworker استفاده کنید که تو همین سایت آموزشش رو گذاشتم
با تشکر اطلا روش پیاده سازی یک Thread چکونه هست مثلا مشکل این کد پائین چی هست
namespace test
{
public partial class Form1 : Form
{
int u;
public Form1()
{
InitializeComponent();
}
private string thh()
{
while (u < 500)
{
u++;
label1.Text = "" + u;
}
}
private void button1_Click(object sender, EventArgs e)
{
Thread a = new Thread(thh);
a.Start();
}
}
}
خوب دوستان عزیز من یک ریسمان رو اجرا کردم به این صورت
namespace test
{
public partial class Form1 : Form
{
int u=0;
string m;
public Form1()
{
InitializeComponent();
Form1.CheckForIllegalCrossThreadCalls = false;
}
public void thh()
{
while (u < 500)
{
Thread.Sleep(100);
u++;
m = Convert.ToString(u);
this.label1.Text =""+ m;
}
}
private void button1_Click(object sender, EventArgs e)
{
Thread a = new Thread(new ThreadStart(thh));
a.Start();
}
}
}
اما یادمه یکی از دوستان گفته بود اینطور اجرا کردن مشکل سازه به خاطر این خط کد Form1.CheckForIllegalCrossThreadCalls = false; کسی می دونه چرا؟
مشکل اینه که ThreadSafe نیست یعنی شما اجازه دادید که Thread های دیگه به فرم شما دسترسی داشته باشند و بتونن فرم رو تغییر بدن
ظاهرا نیاز به استفاده از Invoke فقط در Windows Forms هست. درمورد WPF چنین چیزی ندیدم.