PDA

View Full Version : سوال: راهنمایی در مورد استفاده از چند نخی(Multithreading)



mamadHadi
شنبه 07 شهریور 1388, 17:35 عصر
سلام دوستان عزیز
یک فرم دارم که یک عضو آن یک آبجکت از یک کلاس دیگر در همان فضای نام است.
کلاس متدی دارد که داده هایی را چندین مرتبه تغییر می دهد.
می خواهم هر موقع داده ها هنگام اجرای این متد تغییر کرد، آنها را در فرم نشان دهم(به روز کنم). یعنی در طول اجرای این متد که به فرم دسترسی ندارد، داده ها در فرم به روز شود.
از طریق متد های فرم می توانم وضعیت داده ها را چک کنم، ولی بعد از اجرای متد مورد نظر.

مثال:


class Sample
{
//some public data
public void Changer()
{
//running a loop
//I want that if data changed,in the loop, form(Owner of class) waked up!()
}
}
public class Form1
{
Sample s = new Sample();
private void Form1_Method()
{
s.Changer();
//how to update Form while running method?
}
}چگونه باید این کار را انجام دهم؟ فکر می کنم باید از چند ریسمانی استفاده کنم. می توانید کدی نمونه برایم بگذارید؟

navid_8x
یک شنبه 08 شهریور 1388, 00:43 صبح
به این کد ها یک نگاه بنداز


public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
Sample s=new Sample((Invoker)Invoke);
s.Changed += new EventHandler<MyEventArgs>(s_Changed);
s.Start();
}

void s_Changed(object sender, MyEventArgs e)
{
//Your Statements
}
}
delegate object Invoker(Delegate D,params object[] args);
class MyEventArgs:EventArgs
{
public MyEventArgs(String result)
: base()
{
Result = result;
}
public string Result;
}
class Sample
{
Invoker _invoker;
Thread MyThread;
public Sample(Invoker invoker)
{
_invoker = invoker;
MyThread = new Thread(new ThreadStart(ThreadProc));
MyThread.IsBackground = true;
}
public void Start()
{
MyThread.Start();
}
void ThreadProc()
{
while (true)
{
if(Your Condition)
_invoker(Changed,new MyEventArgs("result"));
}
}
public event EventHandler<MyEventArgs> Changed;
}