取消主窗体关闭,而某些线程在后面运行C#.windows应用程序?

时间:2012-03-09 06:42:57

标签: c# multithreading

我正在运行后台线程来在Windows应用程序中移动一些配置文件数据。该线程将在某个时间间隔内运行。

如果用户在线程运行时尝试关闭表单,我应该提示用户该线程正在运行,并且不应该允许用户关闭表单。一旦它(线程)完成,那么只有我必须关闭表单。

如果我在'Form_Closing'事件中执行它,则线程停止(当我调试时)和控件 留在表格本身。关闭表单后,线程恢复..,不确定是否有任何问题。

我如何有效地处理这个问题?

2 个答案:

答案 0 :(得分:1)

Closing事件中,您可以使用Cancel属性:

private void Form1_FormClosing(object sender, FormClosingEventArgs e) {
        if (backgroundWorker1.IsBusy) {
            MessageBox.Show("Thread busy!");
            e.Cancel = true;
        }
    }

答案 1 :(得分:0)

如果您对表单中的线程有引用,则可以在OnFormClosing事件中检查其IsAlive属性。如果是,则阻止表单靠近e.Cancel =!Thread.IsAlive