主线程等待子线程结果过程中,怎么即处于等待状态,又不阻塞主线程继续响应其他消息?请高手支招,
主线程等待子线程结果过程中,如何即处于等待状态,又不阻塞主线程继续响应其他消息?请高手支招,在线等..........
有一个界面按钮事件A,要求实现以下功能:
1、等待子线程执行结束,得到结果后继续执行,这个不难
2、在等待子线程的过程中,要能继续响应界面上其他按钮的点击事件(这个不会)
A事件的响应函数如何写?请高手支招
VC++可以实现这个功能,但C#下不会
------解决思路----------------------
放到BackgroundWorker里去执行,执行完有回调函数,通知主线程继续执行其他代码.
------解决思路----------------------
完整代码,你可以测下看。空窗体拖两个button上来,分别双击生成事件,然后把代码复制进去就好
有一个界面按钮事件A,要求实现以下功能:
1、等待子线程执行结束,得到结果后继续执行,这个不难
2、在等待子线程的过程中,要能继续响应界面上其他按钮的点击事件(这个不会)
A事件的响应函数如何写?请高手支招
VC++可以实现这个功能,但C#下不会
------解决思路----------------------
放到BackgroundWorker里去执行,执行完有回调函数,通知主线程继续执行其他代码.
------解决思路----------------------
完整代码,你可以测下看。空窗体拖两个button上来,分别双击生成事件,然后把代码复制进去就好
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
CancellationTokenSource uploadCancellationTokenSource;
public Form1() { InitializeComponent(); }
string 传输数据()
{
//3、数据传输结束后,还要等待服务器返回操作结果(不定时);
//怎么传数据你写在这里。。。我就写个延时拉倒了
for (var i = 0; i < 20; i++)
{
Thread.Sleep(100);
if (uploadCancellationTokenSource.IsCancellationRequested)
{
return "N";
}
}
return "M";
}
async void button1_Click(object sender, EventArgs e)
{
//1、点击按钮A,启动一个后台线程P,向服务器传输数据;
uploadCancellationTokenSource = new CancellationTokenSource();
//4、在事件A的处理函数中,要得到处理结果C(如果用户没有点击B,返回M,点击了返回N)
MessageBox.Show(await Task.Run((Func<string>)传输数据, uploadCancellationTokenSource.Token));
}
void button2_Click(object sender, EventArgs e)
{
//2、在数据传输过程中,用户可以随时点击B,撤销当前业务;
uploadCancellationTokenSource.Cancel();
}
}
}