Отображать текст в текстовом поле после вызова функции - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть программа для отправки электронной почты на основе данных datagridview.Это хорошо работает при отправке электронной почты, но я хочу, чтобы содержимое текстового поля менялось после каждого вызова функции.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Threading;
using System.Net.Mail;
using System.Net;


namespace sendEmail
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnGetData_Click(object sender, EventArgs e)
        {
            string connectionString = "connectionString";
            string sql = "sqlQuery";
            SqlConnection connection = new SqlConnection(connectionString);
            SqlDataAdapter dataadapter = new SqlDataAdapter(sql, connection);
            DataSet ds = new DataSet();
            connection.Open();
            dataadapter.Fill(ds, "data");
            connection.Close();
            dataGridView1.DataSource = ds;
            dataGridView1.DataMember = "data";
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                textBox1.Text += "Processing .... " + row.Cells["data"].Value.ToString();
                sendMail("subject", row.Cells["data"].Value.ToString(), "emailString");
                 )
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            dataGridView1.AllowUserToAddRows = false;
        }

        private void sendMail (string subject, string content, string email)
        {
            try
            {
                MailMessage mail = new MailMessage();
                SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
                mail.From = new MailAddress("myEmail@gmail.com");
                mail.To.Add("toEmail@gmail.com");
                mail.Subject = "Mail for " + content;
                mail.Body = content;


                SmtpServer.Port = 587;
                SmtpServer.Credentials = new System.Net.NetworkCredential("myEmail@gmail.com", "myPassword");
                SmtpServer.EnableSsl = true;

                SmtpServer.Send(mail);
                textBox1.Text += " -> Success\n";
            }
            catch
            {
                textBox1.Text += " -> Fail\n";
            }
        }


    }
}

при запуске программы содержимое текстового поля изменяется только тогда, когда функция вызывается все время (все строки в цикле сетки данных).

Итак, как я могу заставить текстовое поле изменять содержимоекаждый раз вызывается функция.

Спасибо за чтение и, пожалуйста, помогите!

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Если вы не хотите использовать BackGroundWorker, вы можете принудительно обновить текстовое поле.
Попробуйте что-то вроде этого

foreach (DataGridViewRow row in dataGridView1.Rows)
{
    textBox1.Text += "Processing .... " + row.Cells["data"].Value.ToString();
    textBox1.Update();
    sendMail("subject", row.Cells["data"].Value.ToString(), "emailString");
    textBox1.Update();
}
0 голосов
/ 19 сентября 2018

Использовать фоновый рабочий .Отправка электронной почты в фоновом потоке (метод DoWork) и отображение статуса в потоке пользовательского интерфейса (метод ProgressChanged).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...