using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.Threading;

namespace LeniwaInicjacja_WF
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }        

        private void button1_Click(object sender, EventArgs e)
        {
            Lazy<Button> lb = new Lazy<Button>(() =>
            {
                Button b = new Button();
                b.Parent = this;
                b.Top = 100;
                b.Left = 100;
                b.Text = "Leniwy przycisk";
                return b;
            });
            MessageBox.Show("Czy utworzona?: " + lb.IsValueCreated.ToString());
            MessageBox.Show("Odwołanie do zmiennej, etykieta przycisku: \"" + lb.Value.Text + "\"");
            MessageBox.Show("Czy utworzona?: " + lb.IsValueCreated.ToString());
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //Button przycisk = new Button();
            Button przycisk = null;
            LazyInitializer.EnsureInitialized<Button>(
                ref przycisk,
                () =>
                {
                    Button b = new Button();
                    b.Parent = this;
                    b.Top = 100;
                    b.Left = 200;
                    b.Text = "Leniwy przycisk";
                    return b;
                }
            );
            MessageBox.Show("Odwołanie do zmiennej, etykieta przycisku: \"" + przycisk.Text + "\"");            
        }
    }
}
