>

메일러가 있는데 여기 코드가 있습니다 :

private static int i=0; 
 protected void btnSubmit_Click(object sender, EventArgs e)
 {    
     ++i; //i want to increment this variable
            {
                SendHTMLMail();
            }

            void SendHTMLMail()
            {
                StreamReader reader = new StreamReader(Server.MapPath("~/one.html"));
                string readFile = reader.ReadToEnd();
                string myString = "";
                myString = readFile;

                MailMessage Msg = new MailMessage();
                Msg.From = new MailAddress(txtUsername.Text);
                Msg.To.Add(txtTo.Text);
                Msg.Subject = txtSubject.Text;
                Msg.Body = myString.ToString();
                Msg.IsBodyHtml = true;
                if (fuAttachment.HasFile)
                {
                    string FileName = Path.GetFileName(fuAttachment.PostedFile.FileName);
                    Msg.Attachments.Add(new Attachment(fuAttachment.PostedFile.InputStream, FileName));
                }
                SmtpClient smtp = new SmtpClient();
                smtp.Host = "smtp.gmail.com";
                smtp.Port = 587;
                smtp.UseDefaultCredentials = false;
                smtp.Credentials = new System.Net.NetworkCredential(txtUsername.Text, txtpwd.Text);
                smtp.EnableSsl = true;
                smtp.Send(Msg);
                Msg = null;
                ClientScript.RegisterStartupScript(GetType(), "alert", "alert('Email sent.');", true);
                // Request both failure and success report
                Msg.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure | DeliveryNotificationOptions.OnSuccess;
                int emailsSent = 0;
                try
                {
                    Console.WriteLine("start to send email ...");
                    smtp.Send(Msg);
                    emailsSent++;
                    Console.WriteLine("email was sent successfully!");
                }
                catch (Exception ex)
                {
                    Console.WriteLine("failed to send email with the following error:");
                    Console.WriteLine(ex.Message);
                }
            }
        }

위의 코드에서 변수 'i'가 있으며 메일을 보낼 때마다 변수를 늘리고 싶습니다. 이제 내가 겪고있는 문제는 localhost의 aspx 페이지가 열릴 때 메일을 다시 보낼 때만 'i'가 증가한다는 것입니다. aspx 페이지를 닫 자마자 다시 열고 메일을 보내면 변수 'i'가 다시 1로 증가하고 4 또는 5는 말하지 않습니다.


  • 답변 # 1

    이 코드를 넣는 위치의 동작이 변경됩니다. ASPX 페이지에 있으면 런타임에서 해당 페이지를 다시 컴파일 할 때마다 정적 데이터가 손실됩니다. DLL 파일에 있으면 응용 프로그램/IIS 풀이 재활용 될 때마다 값을 잃게됩니다. 최종 값을 영구 저장소 (예 : 데이터베이스)에 저장해야합니다. 다음에 필요할 때 DB에서 검색하여 증가시킨 다음 다시 저장해야합니다. 웹 애플리케이션은 다중 스레드이며 정적 변수는 스레드 안전하지 않으므로주의하십시오. 두 개의 스레드가 동시에 동일한 변수를 수정하면 혼란에 빠질 것입니다. 다중 스레드 응용 프로그램에서 정적 변수에 액세스하려면 잠금 메커니즘을 사용하십시오.

  • 답변 # 2

    애플리케이션의 정적 클래스를 정의해야합니다. 개체와 함께 다시로드됩니다.)

    메일을 보낼 때마다 증가 할 변수/속성을 사용하여 정적 클래스 (또는 생성자가 호출 된 비 정적 클래스)를 정의하십시오.

    public static class Mail
    {
           private static int mailCount;
           public static void MailSent()
           {
              mailCount++;
           }
           public static int GetMailCount()
           {
              return mailCount;
           }
    }
    
    

    이제 버튼 클릭으로 정적 메소드를 사용하여 mailCount-를 늘리고 검색하십시오.

    protected void btnSubmit_Click(object sender, EventArgs e)
    {
         Mail.MailSent(); // increments every time you send mail
         // to check how many mails sent in debug console
         System.Diagnostics.Debug.WriteLine(Mail.GetMailCount()); 
         //... YOU MAILING CODE
    }
    
    

  • 이전 php - nav_menu_item_id를 사용하여 Wordpress 메뉴에서 특정 요소 편집
  • 다음 android - RadioGroup에서 RadioButton 아이콘 중심