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

نام تاپیک: مشکل با thread و فراخوانی sendmessage

  1. #1
    کاربر دائمی آواتار JikSearch
    تاریخ عضویت
    خرداد 1383
    محل زندگی
    روبروی مانیتور
    پست
    259

    مشکل با thread و فراخوانی sendmessage

    سلام
    داخل ترد نمیشه این کار را انجام داد، چطور باید اصلاحش کنم؟
    هر راهنمایی بفرمائید ممنون میشم


    public int WM_SYSCOMMAND = 0x0112;
    public int SC_MONITORPOWER = 0xF170; //Using the system pre-defined MSDN constants that can be used by the SendMessage() function .
    [DllImport("user32.dll")]
    private static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);

    private void Form1_Load(object sender, EventArgs e)
    {
    new Thread(new ThreadStart(Sleep_Time)).Start();
    }

    public void Sleep_Time()
    {
    DateTime dt06AM = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 6, 1, 0);

    while (true)
    {

    if (DateTime.Now < dt06AM)
    {
    //turn_off_display();
    SendMessage(this.Handle.ToInt32(), WM_SYSCOMMAND, SC_MONITORPOWER, 2);
    }
    Thread.Sleep(50000);
    }
    }

  2. #2
    VIP آواتار Amir Oveisi
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    هر جا که حال کنم - فعلا یزد
    پست
    2,604

    نقل قول: مشکل با thread و فراخوانی sendmessage

    توی متدتون داخل if‌ رو به این شکل تغییر بدید:

     if (DateTime.Now < dt06AM)
    {
    //turn_off_display();
    if (this.InvokeRequired)
    this.Invoke(new MethodInvoker(delegate() { SendMessage(this.Handle.ToInt32(), WM_SYSCOMMAND, SC_MONITORPOWER, 2); }));
    else
    SendMessage(this.Handle.ToInt32(), WM_SYSCOMMAND, SC_MONITORPOWER, 2);
    }


    exception‌ ای رخ میده به این دلیل هست که شما میخواید از طریق thread ای که سازنده یک object نبوده؛ به اون object‌دسترسی داشته باشید. یعنی از طریق thread‌جدیدی که ساختید میخواستید به this (که توسط thread‌اصلی برنامه ساخته شده) دسترسی داشته باشید که در حالت عادی نمیشه.
    هر thread‌به object هایی دسترسی داره که خودش ایجادشون کرده باشه.

  3. #3
    کاربر دائمی آواتار JikSearch
    تاریخ عضویت
    خرداد 1383
    محل زندگی
    روبروی مانیتور
    پست
    259

    نقل قول: مشکل با thread و فراخوانی sendmessage

    بسیار ممنون
    درست شد، خیلی لطف کردید


    برای استفاده دوستان:
    این کد مانیتور را در زمان مورد نظر خاموش می کند
    آخرین ویرایش به وسیله JikSearch : سه شنبه 08 آذر 1390 در 07:10 صبح

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

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