If you're on debug mode, take a look at the output window. It should shows exception message something like this: 
System.InvalidOperationException' in System.Windows.Forms.dll.
That because label1 accessed from a thread other than the thread it was created on. And it will causing invalid cross-thread operation.
You can solve this by using Control.Invoke as Dmitry Bychenko already mentioned. Here is simple extension to make thread-safe calls to Winforms Control.
public static void TryInvoke(this Control control, Action<Control> action)
{
      if (control.InvokeRequired) control.Invoke(new Action(() => action(control)));
      else action(control);
}
Sample usage
label1.TryInvoke(x => x.Text = "test"); 
label1.TryInvoke(x => x.ForeColor = Color.Blue);
Or
this.TryInvoke(x =>
{
     label1.Text = "test";
     label1.ForeColor = Color.Blue;
});
Secondly, since you don't await anything at monitor_r, i'd recommend to use void instead of async Task.
Even if you're await something at monitor_r you don't need 
await Task.Run(() => {
        monitor_r(label1);
    });
..because monitor_r itself is a task. So just call await monitor_r(label1);