با سلام
من بعضی فرمهایی که طراحی کردم هنگام اجرا به کندی لود می شود. از چند tablelayout در فرم استفاده کردم. میخواستم ببینم برای بالا رفتن سرعت لود فرم چه راهکارهایی وجود دارد؟
Printable View
با سلام
من بعضی فرمهایی که طراحی کردم هنگام اجرا به کندی لود می شود. از چند tablelayout در فرم استفاده کردم. میخواستم ببینم برای بالا رفتن سرعت لود فرم چه راهکارهایی وجود دارد؟
با سلام
tablelayout بخاطر autosize ی که روی آبجکت های درونش انجام میشه کمی سرعت و کند می کنه ولی آنقدر نیست که اذیت کند مشکلتون بیشتر object هایی و کدهایی است که در هنگام load وارد کردید
به هر حال روش زیر کمک کنندس
در فرم خاصیت DoubleBuffered رو برابر True قرار بدید
و این کد رو هم هم طبق فرم برنامتون بزارید
public static void SetDoubleBuffered(System.Windows.Forms.Control c)
{
if (System.Windows.Forms.SystemInformation.TerminalSe rverSession)
return;
System.Reflection.PropertyInfo aProp = typeof(System.Windows.Forms.Control).GetProperty(" DoubleBuffered",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance);
aProp.SetValue(c, true, null);
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000;
return cp;
}
}
private void Form1_Load(object sender, EventArgs e)
{
SetDoubleBuffered(tableLayoutPanel1);
}
موفق باشید
با تشکر از پاسخ بسیار خوبتان. فرمها به سرعت لود می شوند. من فقط برای کنترلهای tablelayout گذاشتم. ولی یه مشکلی که به وجود امد دکمه های برنامه ام وقتی با موس می روم روی انها با تاخیر کلیک می شود. یعنی یک مقدار موس را باید روی کنترل نگه دارم تا عمل کند. مشکل بعدی این است که وقتی فرم لود میشود یه لحظه اول کل صفحه به مدت یک ثانیه مشکی می شود بعد فرم بالا می اید.
با سلام
بدون بررسی کردن پروژه بیشتر از این نمیشه راهنمایی کرد
یک توصیه دیگه اینه که یک خروجی بگیرید و پوشه Debug رو روی یک سیستم دیگه تست کنید
یک نمونه اینجا بزارید تا بهتر بشه بررسی کرد
موفق باشید
این قطعه را حذف کردم مشکل سیاهی برطرف شد ولی وقتی آن کد بود سرعت خیلی بهتر و بالاتر بود ولی مشکل سیاهی داشت
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000;
return cp;
}
}
این cp.ExStyle دیگر مقادیر آن چیست. نمیشه مقدارهای دیگه داد به ان؟
لینک زیر هم همین مشکل من رو داشتند
http://www.c-sharpcorner.com/forums/...r-on-form-load
با سلام
این دفعه DoubleBuffered فرم رو روی False قرار بدید
در فضای General (بالای فرم):
int intOriginalExStyle = -1;
bool bEnableAntiFlicker = true;
سازنده(Constructor) رو بشکل زیر تغییر بدید:
public Form1()
{
ToggleAntiFlicker(false);
InitializeComponent();
this.ResizeBegin += new EventHandler(Form1_ResizeBegin);
this.ResizeEnd += new EventHandler(Form1_ResizeEnd);
}
این متدها رو اضافه کنید:
private void ToggleAntiFlicker(bool Enable)
{
bEnableAntiFlicker = Enable;
this.MaximizeBox = true;
}
protected override CreateParams CreateParams
{
get
{
if (intOriginalExStyle == -1)
{
intOriginalExStyle = base.CreateParams.ExStyle;
}
CreateParams cp = base.CreateParams;
if (bEnableAntiFlicker)
{
cp.ExStyle |= 0x02000000; //WS_EX_COMPOSITED
}
else
{
cp.ExStyle = intOriginalExStyle;
}
return cp;
}
}
کد زیر رو در اونت ResizeBegin
ToggleAntiFlicker(true);
و این رو در ResizeEnd قرار بدید
ToggleAntiFlicker(true);
باز هم میگم بیشتر ممکنه مربوط به کدهای Load تون باشه
موفق باشید
سلام
فقط کافیه بالای فرم مادر کد زیر را قرار دهیدمشکل کندی سرعت حل خواهد شد
namespace NameProject
}
public partial class FRM_Main : Form
}
protectedoverrideCreateParams CreateParams
}
get
}
;CreateParams cp = base.CreateParams
;cp.ExStyle |= 0x02000000
;return cp
{
{
{
سلام
داخل رویداد load کد نوشتید زیاده ؟ اگه اینطوره برای بالا بردن سرعت دستورات داخل load فرم را داخل یک تابع قرار بدین و بصورت نامتقارن در یک thread صداش بزنید.