C#在程序中构造函数
我在C#中有一个表单应用程序,它在UI线程上完成它所需要的一切。它在计算上并不昂贵,但相当耗时,因为它会等待其他系统的响应,并在此期间锁定UI 下面是我日常工作的一个片段C#在程序中构造函数,c#,asynchronous,C#,Asynchronous,我在C#中有一个表单应用程序,它在UI线程上完成它所需要的一切。它在计算上并不昂贵,但相当耗时,因为它会等待其他系统的响应,并在此期间锁定UI 下面是我日常工作的一个片段 private void btnRun_Click(object sender, EventArgs e) { TextAppend("Checking Laser Marker TCP/IP..."); foreach(string t in Steps) {
private void btnRun_Click(object sender, EventArgs e)
{
TextAppend("Checking Laser Marker TCP/IP...");
foreach(string t in Steps)
{
var itm = new ListViewItem(t);
listView1.Items.Add(itm);
}
listView1.Items[0].BackColor = Color.PaleGoldenrod;
progressBar1.Value = 0;
LabelShows(1);
//Check the TCP/IP connection
progressBar1.Value = 21;
bool checkIP = RunModule.CheckConnection("GI SN", IP, port, this);
if (checkIP == false)
{
listView1.Items[0].BackColor = Color.Red;
MessageOK("Failed to connect to the Laser Marker! Please check IP, Port and serial numbers match the Laser marker.", "warn");
LabelShows(0);
return;
}
}
该科:
bool checkIP = RunModule.CheckConnection("GI SN", IP, port, this);
if (checkIP == false)
{
listView1.Items[0].BackColor = Color.Red;
MessageOK("Failed to connect to the Laser Marker! Please check IP, Port and serial numbers match the Laser marker.", "warn");
LabelShows(0);
return;
}
在具有不同功能的例程的后续几次中以类似的方式发生。所有函数都从不同的类运行
我曾考虑过使用backgroundworkers,但这些报告的是进度,而不是bool。我已经看过了
Task.Run()
,但是我看不到实现它的方法。有人能就如何更好地组织我的日常工作提供建议吗?您可以使用BackgroundWorker来实现您的目标。键是
dowworkeventargs
,它具有传递给RunWorkerCompleted
事件的属性Result
。(RunWorkerCompleted事件在UI线程中运行):
可能重复感谢您的回复!我可以告诉我的主UI线程在继续之前等待
e.result
返回吗?主线程要求任务按顺序发生。
private void bgw_DoWork(object sender, DoWorkEventArgs e)
{
...
e.Result = RunModule.CheckConnection("GI SN", IP, port, this);
}
private void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
var checkIP = (bool) e.Result;
if (checkIP == false)
{
listView1.Items[0].BackColor = Color.Red;
MessageOK("Failed to connect to the Laser Marker! Please check IP, Port and serial numbers match the Laser marker.", "warn");
LabelShows(0);
}
}