私はこのアプリケーションをtabControlと、その他すべての必要なコントロールとともに持っています。電子メールを送信し、同時にアプリケーションを応答し続けるにはどうすればよいですか?
したがって、アプリケーションの主なタスクは電子メールを送信することです.1を送信すると、アプリケーションは2秒間応答しません。 しかし、私が10のように送信しようとすると、それは20秒間私のアプリケーションが応答しなくなります。あなたが想像しているように、これはとても良いことではありません。
私はスレッディングを試みてきましたが、所有するスレッドでUI操作を実行する必要があるというエラーが表示され続けます。
最初のListViewからtabControlの最初のTabから名前を取得していて、2番目のタブのボタンを押したときにその名前を使用しているので、苦労しているのは最後の3行ですそれらを3番目のタブに渡して、最終的に2番目のリストビューに入ります。
これは動作しますが、このプロセスを実行しているときにアプリケーションを「保留中」にして、スレッド処理を試みましたが、動作させることができませんでした。
この機能を適切にスレッド化するか、スレッド化しませんか?
using System;
using System.Net;
using System.Net.Mail;
using System.Windows.Forms;
namespace LearningTol
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnSend_Click(object sender, EventArgs e)
{
foreach(ListViewItem email in lvEmails.Items)
{
MailMessage msg = new MailMessage();
msg.From = new MailAddress(tbUsername.Text);
msg.To.Add(new MailAddress(email.Text));
msg.Subject = "Subject";
msg.Body = tbMessage.Text;
msg.IsBodyHtml = false;
SmtpClient client = new SmtpClient();
client.Host = "smtp.gmail.com";
client.Port = 587;
client.Credentials = new NetworkCredential(tbUsername.Text, tbPassword.Text);
client.EnableSsl = true;
client.Send(msg);
ListViewItem lvi = new ListViewItem(email.Text);
lvi.SubItems.Add("Done!");
lvFinishedEmails.Items.Add(lvi);
}
}
}
}
どこかで待っている必要はありませんか? – JonnyKhanas
それは正しいです、 'await client.SendAsync(msg);を読む行を参照してください – Stuart
私はそうです! – JonnyKhanas