ronix3
یک شنبه 04 مهر 1395, 19:13 عصر
سلام من با wpf کار می کنم شاید بگین خیلی پیش پا افتادس ولی هم تو سایت های داخلی و هم خارجی گشتم اون چیزی که کارمو راه بندازه پیدا نکردم
می خوام در نخ جدیدی که می سازم از شی مثل تکست باکس که در یک نخ دیگر ساخته شده استفاده کنم اگه یک یا ۲ شی باشه مشکلی ندارم و با کد زیر کار می کنم
new Thread(() =>
{
Dispatcher.Invoke(() =>
{
for (int i = 0; i < 1000000; i++)
{
textBox1.Text = i.ToString();
}
});
}).Start();
کد بالا مشکلی نداره و با اولین بار شروع نخ بدون هنگ کردن برنامه کار می کنه
ولی کد زیر در اولین بار شروع نخ بعد از اجرای برنامه هنگ می کنه تا انتهای پروسس و در دفعات بعد مشکلی نداره
new Thread(() =>
{
Dispatcher.Invoke(() =>
{
for (int i = 0; i < 1000000; i++)
{
textBox1.Text = i.ToString();
textBox2.Text = (2 * i).ToString();
}
});
}).Start();
حالا اگه به صورت زیر بنویسم مشکل حل می شه
new Thread(() =>
{
for (int i = 0; i < 1000000; i++)
{
Dispatcher.Invoke(() =>
{
textBox1.Text = i.ToString();
});
Dispatcher.Invoke(() =>
{
textBox2.Text = (2 * i).ToString();
});
}
}).Start();
مشکل من اینه که تعداد اشیاء زیاد هست و نمی شه این کارو برای هر شی کرد کد خیلی شلوغ و گیج کننده می شه
از کد زیر هم استفاده کردم و مشکل بالا رو داشتم
ممنون می شم راهنماییم کنید
void test()
{
if (!Dispatcher.CheckAccess())
{
Dispatcher.Invoke(test);
}
else
{
for (int i = 0; i < 100000000; i++)
{
textBox1.Text = i.ToString();
textBox2.Text = (2 * i).ToString();
}
}
}
می خوام در نخ جدیدی که می سازم از شی مثل تکست باکس که در یک نخ دیگر ساخته شده استفاده کنم اگه یک یا ۲ شی باشه مشکلی ندارم و با کد زیر کار می کنم
new Thread(() =>
{
Dispatcher.Invoke(() =>
{
for (int i = 0; i < 1000000; i++)
{
textBox1.Text = i.ToString();
}
});
}).Start();
کد بالا مشکلی نداره و با اولین بار شروع نخ بدون هنگ کردن برنامه کار می کنه
ولی کد زیر در اولین بار شروع نخ بعد از اجرای برنامه هنگ می کنه تا انتهای پروسس و در دفعات بعد مشکلی نداره
new Thread(() =>
{
Dispatcher.Invoke(() =>
{
for (int i = 0; i < 1000000; i++)
{
textBox1.Text = i.ToString();
textBox2.Text = (2 * i).ToString();
}
});
}).Start();
حالا اگه به صورت زیر بنویسم مشکل حل می شه
new Thread(() =>
{
for (int i = 0; i < 1000000; i++)
{
Dispatcher.Invoke(() =>
{
textBox1.Text = i.ToString();
});
Dispatcher.Invoke(() =>
{
textBox2.Text = (2 * i).ToString();
});
}
}).Start();
مشکل من اینه که تعداد اشیاء زیاد هست و نمی شه این کارو برای هر شی کرد کد خیلی شلوغ و گیج کننده می شه
از کد زیر هم استفاده کردم و مشکل بالا رو داشتم
ممنون می شم راهنماییم کنید
void test()
{
if (!Dispatcher.CheckAccess())
{
Dispatcher.Invoke(test);
}
else
{
for (int i = 0; i < 100000000; i++)
{
textBox1.Text = i.ToString();
textBox2.Text = (2 * i).ToString();
}
}
}