2016-09-23 43 views
1

背景:我运行一个应用程序,其任务是在无限循环中打印“task + number”。当我关闭应用程序时,我想知道发生了什么事情,以及我如何看到它。如果我关闭应用程序,发生了什么事情C#

我的例子,我用它来查看运行任务:

//delegate to pring text in label 
    private delegate void SetTextToControlDelegate(string text, Control control); 

private void SetTextToControl(string text, Control control) 
{ 
    if (control.InvokeRequired) 
    { 
     SetTextToControlDelegate deleg = 
      new SetTextToControlDelegate(SetTextToControl); 

     this.Invoke(deleg, new object[] { text, control }); 
    } 
    else 
    { 
     control.Text = text; 
    } 
} 

//run a task 
private void Run() 
{ 
    Task.Factory.StartNew(() => 
     { 
      int i = 0; 
      while (true) 
      { 
       Thread.Sleep(1000); 
       i++; 
       string result = "task " + i.ToString(); 
       SetTextToControl(result, label1); 

      } 
     }); 
} 

//button to run task 
private void button1_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     Run(); 

    } 
    catch (Exception ex) 
    { 
     SetTextToControl(ex.Message,label1); 
    } 
} 
+0

我想如果关闭整个应用程序,任务就会被终止。 – Sebi

+0

任务被杀死。线程属于进程。 –

回答

2

您的应用程序是一个过程。进程是线程的父亲。进程还管理内存。所以,线程(任务)及其内存属于进程。如果应用程序(进程)关闭,它将删除其所有子项。任务被杀死,内存被释放。

2

的任务将被中止,您的应用程序将关闭。就这样。

调用代码可能会得到一些更改来清理,但这一切都取决于应用程序的关闭状态(它是否崩溃)。

附注:不要在Task中使用Thread.Sleep。如果任务在同一线程上执行,则可能导致死锁。使用await Task.Delay

相关问题