مشکل با 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);
}
}
نقل قول: مشکل با 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 هایی دسترسی داره که خودش ایجادشون کرده باشه.
نقل قول: مشکل با thread و فراخوانی sendmessage
بسیار ممنون
درست شد، خیلی لطف کردید
برای استفاده دوستان:
این کد مانیتور را در زمان مورد نظر خاموش می کند