这是我在项目中使用的OpenPop链接:
这是一个包含示例的页面:
这是我的代码。在form1设计器中,我添加了progressBar。
我想要做的是获取我在服务器上的所有消息,并在progressBar中显示检索消息的进度。
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;
namespace Pop3_Emails
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
backgroundWorker1.RunWorkerAsync();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
OpenPop.Pop3.Pop3Client PopClient = new OpenPop.Pop3.Pop3Client();
PopClient.Connect("mail.bezeqint.net", 110, false);
PopClient.Authenticate("meemail", "password",
OpenPop.Pop3.AuthenticationMethod.UsernameAndPassword);
int messageCount = PopClient.GetMessageCount();
List<Message> allMessages = new List<Message>(messageCount);
for (int i = messageCount; i > 0; i--)
{
allMessages.Add(PopClient.GetMessage(i));
}
backgroundWorker1.ReportProgress(0,PopClient.GetMessageCount().ToString());
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
label1.Text = e.UserState.ToString();
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
}
}
}
第一个问题是我在线上遇到两个错误:
allMessages.Add(PopClient.GetMessage(i));
错误1最佳重载方法匹配 &#39; System.Collections.Generic.List.Add(System.Windows.Forms.Message)&#39; 有一些无效的论点
错误2参数1:无法转换为&#39; OpenPop.Mime.Message&#39;至 &#39; System.Windows.Forms.Message&#39;
第二个问题是如何向progressBar报告进度?不知何故从FOR循环内部。
答案 0 :(得分:0)
我认为,第一个问题是由AlexK解决的。
第二个问题可以通过设置来解决:
backgroundWorker1.WorkerReportsProgress = true;
在您的for循环中,您可以通过以下方式计算和报告进度:
int nProgress = (messageCount - i) * 100 / messageCount;
backgroundWorker1.ReportProgress(0, nProgress);
现在,您可以展示自己的进步:
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
int nProgress = (int)e.UserState;
label1.Text = nProgress.ToString();
progressBar1.Value = nProgress;
}
但我也看到,您正在将所有下载的消息添加到本地变量List<Message> allMessages
。因此,下载完成后会丢失。也许你应该把它移到课堂上......