我有一个表单在表单加载事件上做了一些很长的过程, 所以我想在表单加载事件期间显示One Gif图像“Please Wait”。
下面是代码。
private void frmWaitShow()
{
try
{
frmWaitwithstatus objWait = new frmWaitwithstatus();// this form has Gif Image for Processing
objWait.lblStatus.Text = "Processing Request, Please wait...";
objWait.ShowDialog();
}
catch (Exception ex)
{
Logger.SystemException(ex);
Logger.FTSError(" ERROR :" + ex.Message + "frmTest || frmWaitShow");
}
}
Thread oThread;
private void frmTest_Load(object sender, EventArgs e)
{
try
{
oThread = new Thread(new ThreadStart(frmWaitShow));
oThread.Start();
//Functions for Connection with devices
if (LoadDatafromDB() == false) return;
if (ElectTestLoad() == false) return;
if (PowerOnSelfTest() == false) { return; }
InitiControlsElectTest();
SetSystemMode(SystemMode.ElectricalMode);
oThread.Abort();
}
catch (Exception ex)
{
oThread.Abort();
Logger.SystemException(ex);
}
}
在Thread.start()之后,我的调试器在每个主线程中执行一步,我创建了一个但是在它转到下面的行之后。
frmWaitwithstatus.cs构造函数第一行
public frmWaitwithstatus()
它停止执行我的线程并在主线程执行完成后执行主线程的所有功能,然后才开始执行我的线程(这是Gif处理图像)。
答案 0 :(得分:2)
使用 async / await 模式将使这变得简单,每个表单都可以在UI线程上运行:
driver :poltergeist, phantomjs_options: ["--ignore-ssl-errors=true"]
delay 10..20
控件的异步扩展名:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private async void Form1_Load(object sender, EventArgs e)
{
// async show loading form dialog
var loadingForm = new LoadingForm();
var loadingDialogTask = this.InvokeAsync(loadingForm.ShowDialog);
// async loading data
var data = await LoadDataAsync();
listBox1.DataSource = data;
loadingForm.Close();
await loadingDialogTask;
}
private async Task<ICollection<string>> LoadDataAsync()
{
// fake work load
await Task.Delay(4000).ConfigureAwait(false);
return Enumerable.Range(1,20000).Select(e => e.ToString()).ToList();
}
}