我想在加載表單時防止閃爍。我通過一個新線程加載表單,然後調用回UI。但是由於我在非UI線程上創建表單,覆蓋(CreateParams)不能按預期工作。當我在UI線程上創建它時完美無瑕地工作。我怎樣才能讓它在UI線程上返回時覆蓋它?當不在UI線程上時CreateParams
// How the loading is done, from UI thread
Thread GetPage = new Thread(() => LoadPage<T>(panel));
public static void LoadPage<T>(Panel Panel)
{
Form form = Activator.CreateInstance(typeof(T)) as Form;
// Now invoke to UI
Panel.Invoke((MethodInvoker)delegate
{
form.TopLevel = false;
form.AutoScroll = true;
Panel.Controls.Add(form);
form.Show();
}
}
// Example of a form
public partial class Start : Form
{
protected override CreateParams CreateParams { get { CreateParams cp =
base.CreateParams; cp.ExStyle |= 0x02000000; return cp; } }
public Start()
{
}
}
我編輯了你的標題。請參閱「[應該在標題中是否包含」標籤「](http://meta.stackoverflow.com/questions/19190/)」,其中共識是「不,他們不應該」。 –
所以你只想在獨立的線程上運行構造函數,然後將表單遷移到UI線程? –
@DanielBrückner,是的。因爲有時表單在加載時會很慢,我不想凍結UI。 – user3447537