-1

i want to generate the dynamic Qr code so please help me out how can i build a dynamic Qr code generator that will change during the run time in every 10 seconds

    private void btnGenerate_Click(object sender, EventArgs e)
    {
        QRCoder.QRCodeGenerator QRGenerator = new QRCoder.QRCodeGenerator();
        DateTime now = DateTime.Now;
        dateTimePickerDate.Text = now.ToLongDateString();
        txtTime.Text = now.ToShortTimeString();

        var qrText = cmbSubject.Text + "\n" + txtSection.Text + "\n" + dateTimePickerDate.Text + "\n" + txtTime.Text + "\n";
        var MyData = QRGenerator.CreateQrCode(cmbSubject.Text + ",\n" + txtSection.Text + ", \n" + dateTimePickerDate.Text + ",\n" + txtTime.Text + ",\n" + txtIP.Text + ",\n", QRCoder.QRCodeGenerator.ECCLevel.H);
        var code = new QRCoder.QRCode(MyData);
        pcQRImage.Image = code.GetGraphic(50);

    }
  • There is no problem here, just a statement of intent. Maybe you should research a timer? – TheGeneral Feb 11 '21 at 08:03
  • 1
    Duplicate, https://stackoverflow.com/questions/12535722/what-is-the-best-way-to-implement-a-timer – TheGeneral Feb 11 '21 at 08:04
  • Does this answer your question? [What is the best way to implement a "timer"?](https://stackoverflow.com/questions/12535722/what-is-the-best-way-to-implement-a-timer) – Caconde Feb 11 '21 at 17:36

2 Answers2

0

You need to add a Timerto your Forms project e.g:

private Timer timerInterval = new Timer();
private QRCoder.QRCodeGenerator QRGenerator = new QRCoder.QRCodeGenerator();

private void btnGenerate_Click(object sender, EventArgs e)
{
    timerInterval.Enabled = true;
    timerInterval.Tick += timerInterval_Tick;
    timerInterval.Interval = 10000;
    timerInterval.Start();
}

private void timerInterval_Tick(object sender, EventArgs e)
{
    DateTime now = DateTime.Now;
    dateTimePickerDate.Text = now.ToLongDateString();
    txtTime.Text = now.ToShortTimeString();

    var qrText = cmbSubject.Text + "\n" + txtSection.Text + "\n" + dateTimePickerDate.Text + "\n" + txtTime.Text + "\n";
    var MyData = QRGenerator.CreateQrCode(cmbSubject.Text + ",\n" + txtSection.Text + ", \n" + dateTimePickerDate.Text + ",\n" + txtTime.Text + ",\n" + txtIP.Text + ",\n", QRCoder.QRCodeGenerator.ECCLevel.H);
    var code = new QRCoder.QRCode(MyData);
    pcQRImage.Image = code.GetGraphic(50);
}

It is also possible to use System.Threading.Timer but then it will be necessary to Invoke your Form elements.

sunriax
  • 592
  • 4
  • 16
  • Yeah so, this is a GDI out of memory exception waiting to happen. Creating multiple images like this and not disposing them will ultimately end in a failure. Maybe you should dispose the last image before you reassign ? – TheGeneral Feb 11 '21 at 08:11
0

Hi you can try this method, this will instantiates the timer to fire every millisecond interval you set.

   private void Form1_Load(object sender, EventArgs e)
    {
            System.Timers.Timer timerInterval = new System.Timers.Timer();
            timerInterval.Elapsed += new ElapsedEventHandler(OnTimedEvent);
            timerInterval.Interval = 10000;
            timerInterval.Enabled = true;
        
           
    }
    
     private static void OnTimedEvent(object source, ElapsedEventArgs e)
     {
        QRCoder.QRCodeGenerator QRGenerator = new QRCoder.QRCodeGenerator();
        DateTime now = DateTime.Now;
        dateTimePickerDate.Text = now.ToLongDateString();
        txtTime.Text = now.ToShortTimeString();
    
        var qrText = cmbSubject.Text + "\n" + txtSection.Text + "\n" + dateTimePickerDate.Text + "\n" + txtTime.Text + "\n";
        var MyData = QRGenerator.CreateQrCode(cmbSubject.Text + ",\n" + txtSection.Text + ", \n" + dateTimePickerDate.Text + ",\n" + txtTime.Text + ",\n" + txtIP.Text + ",\n", QRCoder.QRCodeGenerator.ECCLevel.H);
        var code = new QRCoder.QRCode(MyData);
        if(pcQRImage!=null)
        {
            pcQRImage.Dispose();
            pcQRImage.Image = code.GetGraphic(50);
        }
        else
        {
             pcQRImage.Image = code.GetGraphic(50);
        }
    
     }
psy
  • 48
  • 5