【发布时间】:2017-11-04 18:08:36
【问题描述】:
我有一个表单正在对表单加载事件进行一些长时间的处理, 所以我想在表单加载事件期间显示一个 Gif 图片“请稍候”。
下面是代码。
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 处理图像)。
【问题讨论】:
-
使用任务并遵循异步/等待路径
-
@MickyD 不,不是。我知道如何处理不同线程上的 UI 控件,这里我调用了单独的表单,其中包含来自线程的 GIF 图像。
-
你的代码显然不会出现这么多错误。您显然是在尝试从工作线程更新 UI;显示来自 MTA 线程的对话框;阻塞你的工作线程,最后但并非最不重要的是,通过调用 abort 无情地结束线程。
标签: c# multithreading winforms async-await thread-synchronization