網頁

顯示具有 Window Form 標籤的文章。 顯示所有文章
顯示具有 Window Form 標籤的文章。 顯示所有文章

C# 破圖問題 (flicker) 之解決辦法

最近寫C#視窗應用程式時遇到了破圖的問題,也就是所謂的Flicker,原因在於我專案中的自訂控制項,是由多個自訂控制項所組成的,造成Visual Studio來不及繪製好控制項,就將圖像提前呈現出來。
我的範例中的破圖情況,實際上只有一個控制項,卻有還沒放大前的殘像

試過了調整visible、拖慢顯示時間等等方法都沒用,最後終於找到解決方法了!詳細程式碼如下:

方法一、
在表單中複寫CreateParams方法:
protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                // Turn on WS_EX_COMPOSITED
                cp.ExStyle |= 0x02000000;  
                
                return cp;
            }
        }

方法二、
緩衝區延長
this.DoubleBuffered = true;
this.WindowState = FormWindowState.Maximized;

希望能幫助到大家!

C# Sending Email (error: 5.5.1 Authentication Required.)

今天在做自動發送EMail給客戶的程式碰到了一個問題:


出現錯誤:SMTP 伺服器需要安全連接,或用戶端未經驗證。 伺服器回應為: 5.5.1 Authentication Required. 


上網找了一陣子發現是gmail權限預設不能讓不明程式發送EMAIL,因此需要到google設定自己的電子郵件允許一般應用程式使用,也就是下圖最下面那排要啟用!!

啟用方法:

登入你的Google後→至Google帳號設定頁面→安全性較低的應用程式存取權限→啟用




看到已啟用後再試一次發送EMAIL就不會出錯了!
希望有幫助到各位!

附上非同步寄送Email的程式碼,如下:

 async public Task<string> SendEmailAsync(string Email) 
        {                  
            string emailFrom = "email@yahoo.com"; //你的email
            string password = "password";
            string emailTo = Email;  //"someone@domain.com";
            string subject = "Hello";
            string body = "Hello, I'm just writing this to say Hi!";
            using (MailMessage mail = new MailMessage())
            {
                mail.From = new MailAddress(emailFrom);
                mail.To.Add(emailTo);
                mail.Subject = subject;
                mail.Body = body;
                mail.IsBodyHtml = false;
                // 設true的話body可用HTML語法
                //mail.Attachments.Add(new Attachment("C:\\SomeFile.txt"));  //附件
               
                using (SmtpClient smtp = new SmtpClient())
                {
                    smtp.Host = "smtp.gmail.com";
                    smtp.Port = 587;
                    smtp.UseDefaultCredentials = false;
                    smtp.Credentials = new NetworkCredential(emailFrom, password);
                    smtp.EnableSsl = true;
                    try { await smtp.SendMailAsync(mail); }
                    catch { return " 的EMail位址不存在"; }
                }
                return "提醒EMail已發送!";
            }           
        }   
呼叫:
async private void BtnSendEmail_Click(object sender, EventArgs e)
{
       string result="";
       sting Email="someone@gmail.com";  
       result = await RemindHelper.SendEmailAsync(Email);
       Label1.Text = result;
}