现在,我正在使用后台工作线程经常检查某些内容,如果满足条件,则会生成一个消息框。
我有一段时间没有注意到,因为我在后台工作人员中调用消息框,所以我失去了通常的消息框行为,即在用户单击消息框上的是/否/取消之前,不允许用户在主窗体上返回.
那么,消息框上是否有一些选项可以始终将其保留在前台?或者是否可以从后台工作人员向主窗体发送消息,以便我可以从那里生成消息框?还有别的办法吗?
谢谢
艾萨克
最佳答案
后台 worker 是不同于 Windows 窗体的线程。因此,您需要让您的后台 worker 以某种方式将信息返回主线程。 在下面的示例中,我使用了 backgroundworker 的 reportProgress 功能,因为事件是在 Windows 窗体线程上触发的。
public partial class Form1 : Form
{
enum states
{
Message1,
Message2
}
BackgroundWorker worker;
public Form1()
{
InitializeComponent();
worker = new BackgroundWorker();
worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);
worker.WorkerReportsProgress = true;
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
//Fake some work, report progress
worker.ReportProgress(0, states.Message1);
}
void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
states state = (states)e.UserState;
if (state == states.Message1) MessageBox.Show("This should hold the form");
}
private void button1_Click(object sender, EventArgs e)
{
worker.RunWorkerAsync();
}
}
注意:后台工作程序不会在 reportProgress 处停止。如果您希望您的 bgworker 等到 mbox 被按下,您需要手动停止它。
关于c# - 在 winforms 应用程序中,如何从必须始终位于前台的后台工作人员运行消息框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6755519/