c# 异步委托如何通过执行结果更新主界面
我的需求是这样的,我后台线程在执行任务,执行一条需要一定时间,然后成功一条记录就往UI线程更新一条记录(比如我用ListBox接收记录)这个操作我目前会做。但是我目前想做...
我的需求是这样的,我后台线程在执行任务,执行一条需要一定时间,然后成功一条记录就往UI线程更新一条记录(比如我用ListBox接收记录)这个操作我目前会做。但是我目前想做一个功能,就是后台线程在执行的过程中,UI界面上执行的那一条显示“执行中,请稍后.....”。然后后台执行成功后,这条记录马上在UI线程更(显示执行成功或者执行失败)。求教下如何操作。 网上搜到异步通过异步委托可以监听后台线程的执行状态,但是我一直不会弄。我下面贴一个简单的例子,往懂的高手帮我改成我需要的结果。谢谢。
public partial class frmMain : Form
{
public delegate void UpdateLogDel(int index);
UpdateLogDel _updateLog;
int index = 0;
public frmMain()
{
InitializeComponent();
}
private void btnStart_Click(object sender, EventArgs e)
{
_updateLog = UpdateMessage;
Thread thread = new Thread(() =>
{
while (true)
{
index++;
Thread.Sleep(TimeSpan.FromSeconds(2));//模拟我的操作需要很长时间。
_updateLog(index);
}
});
thread.IsBackground = true;
thread.Start();
}
void UpdateMessage(int i)
{
if (this.InvokeRequired)
this.Invoke(_updateLog, i);
else
this.lstLog.Items.Add("测试记录" + i.ToString());
}
} 展开
public partial class frmMain : Form
{
public delegate void UpdateLogDel(int index);
UpdateLogDel _updateLog;
int index = 0;
public frmMain()
{
InitializeComponent();
}
private void btnStart_Click(object sender, EventArgs e)
{
_updateLog = UpdateMessage;
Thread thread = new Thread(() =>
{
while (true)
{
index++;
Thread.Sleep(TimeSpan.FromSeconds(2));//模拟我的操作需要很长时间。
_updateLog(index);
}
});
thread.IsBackground = true;
thread.Start();
}
void UpdateMessage(int i)
{
if (this.InvokeRequired)
this.Invoke(_updateLog, i);
else
this.lstLog.Items.Add("测试记录" + i.ToString());
}
} 展开
1个回答
2015-05-18 · 知道合伙人软件行家
关注
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询