c# - 在 winforms 应用程序中,如何从必须始终位于前台的后台工作人员运行消息框?

标签 c# winforms

现在,我正在使用后台工作线程经常检查某些内容,如果满足条件,则会生成一个消息框。

我有一段时间没有注意到,因为我在后台工作人员中调用消息框,所以我失去了通常的消息框行为,即在用户单击消息框上的是/否/取消之前,不允许用户在主窗体上返回.

那么,消息框上是否有一些选项可以始终将其保留在前台?或者是否可以从后台工作人员向主窗体发送消息,以便我可以从那里生成消息框?还有别的办法吗?

谢谢

艾萨克

最佳答案

后台 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/

相关文章:

c# - EnvDTE.DTE 为 Visual Studio 2015 创建空 C++ 项目

c# - LibGit2Sharp Pull() 不 pull 已删除的文件

c# - wpf 数据网格定制(边框、单元角等)

c# - Entity Framework 是否需要预取路径?

c# - 单击组合框按钮的任何特定事件

c# - 当子项打开时禁用 MDI 窗体的控件

c# - WebBrowser 控件和通过 ID 获取元素

c# - 从图形转换为位图时出现空位图

c# - 在 XAML 中显示过时/弃用的类用法

c# - 如何从 DataSet 中的 DataTable 存储中检索数据并将其存储在数组中?