我有一个用C#编写的Qr生成器应用程序。所以现在我想生成Qr码,在运行期间每10秒改变一次

我有一个用C#编写的Qr生成器应用程序。所以现在我想生成Qr码,在运行期间每10秒改变一次,c#,visual-studio,winforms,qr-code,C#,Visual Studio,Winforms,Qr Code,我想生成动态Qr码,因此请帮助我如何构建一个动态Qr码生成器,该生成器将在运行期间每10秒更改一次 private void btnGenerate_Click(object sender, EventArgs e) { QRCoder.QRCodeGenerator QRGenerator = new QRCoder.QRCodeGenerator(); DateTime now = DateTime.Now; dateTimeP

我想生成动态Qr码,因此请帮助我如何构建一个动态Qr码生成器,该生成器将在运行期间每10秒更改一次

    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);

    }

您需要在表单项目中添加一个
计时器
,例如:

private Timer timerInterval=new Timer();
private QRCoder.QRCodeGenerator QRGenerator=新的QRCoder.QRCodeGenerator();
私有void btn生成\单击(对象发送者,事件参数e)
{
timerInterval.Enabled=true;
timerInterval.Tick+=timerInterval_Tick;
时间间隔=10000;
timerInterval.Start();
}
私有void timerInterval_Tick(对象发送方,事件参数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代码=新的QRCoder.QRCode(MyData);
pcQRImage.Image=code.GetGraphic(50);
}

也可以使用
System.Threading.Timer
,但随后有必要
调用
表单
元素。

您好,您可以尝试此方法,这将实例化计时器,以在设置的每毫秒间隔触发一次

   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);
        }
    
     }

这里没有问题,只是一份意向声明。也许你应该研究一下计时器?重复,这能回答你的问题吗?是的,这是一个等待发生的GDI内存不足异常。创建这样的多个映像而不处理它们最终将以失败告终。也许您应该在重新分配之前处理最后一个映像?