نمایش نتایج 1 تا 2 از 2

نام تاپیک: راهنمایی در مورد استفاده از چند نخی(Multithreading)

  1. #1

    Question راهنمایی در مورد استفاده از چند نخی(Multithreading)

    سلام دوستان عزیز
    یک فرم دارم که یک عضو آن یک آبجکت از یک کلاس دیگر در همان فضای نام است.
    کلاس متدی دارد که داده هایی را چندین مرتبه تغییر می دهد.
    می خواهم هر موقع داده ها هنگام اجرای این متد تغییر کرد، آنها را در فرم نشان دهم(به روز کنم). یعنی در طول اجرای این متد که به فرم دسترسی ندارد، داده ها در فرم به روز شود.
    از طریق متد های فرم می توانم وضعیت داده ها را چک کنم، ولی بعد از اجرای متد مورد نظر.

    مثال:

    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?
    }
    }
    چگونه باید این کار را انجام دهم؟ فکر می کنم باید از چند ریسمانی استفاده کنم. می توانید کدی نمونه برایم بگذارید؟

  2. #2
    کاربر دائمی آواتار navid_8x
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    قزوین
    پست
    130

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

    به این کد ها یک نگاه بنداز

    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;
    }

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •