求高手解答 用C#如何实现多线程控制多个邮箱,一个线程控制一个邮箱发邮件,发邮件的方法已实现。
3个回答
展开全部
MSDN:
.NET Framework 类库
Thread 类
创建并控制线程,设置其优先级并获取其状态。
命名空间:System.Threading
程序集:mscorlib(在 mscorlib.dll 中)
备注
一个进程可以创建一个或多个线程以执行与该进程关联的部分程序代码。使用 ThreadStart 委托或 ParameterizedThreadStart 委托指定由线程执行的程序代码。使用 ParameterizedThreadStart 委托可以将数据传递到线程过程。
在线程存在期间,它总是处于由 ThreadState 定义的一个或多个状态中。可以为线程请求由 ThreadPriority 定义的调度优先级,但不能保证操作系统会接受该优先级。
GetHashCode 提供托管线程的标识。在线程的生存期内,无论获取该值的应用程序域如何,它都不会和任何来自其他线程的值冲突。
注意
操作系统 ThreadId 和托管线程没有固定关系,这是因为非托管宿主能控制托管与非托管线程之间的关系。特别是,复杂的宿主可以使用 CLR Hosting API 针对相同的操作系统线程调度很多托管线程,或者在不同的操作系统线程之间移动托管线程。
下面的代码示例说明简单的线程处理功能。
using System;
using System.Threading;
// Simple threading scenario: Start a static method running
// on a second thread.
public class ThreadExample {
// The ThreadProc method is called when the thread starts.
// It loops ten times, writing to the console and yielding
// the rest of its time slice each time, and then ends.
public static void ThreadProc() {
for (int i = 0; i < 10; i++) {
Console.WriteLine("ThreadProc: {0}", i);
// Yield the rest of the time slice.
Thread.Sleep(0);
}
}
public static void Main() {
Console.WriteLine("Main thread: Start a second thread.");
// The constructor for the Thread class requires a ThreadStart
// delegate that represents the method to be executed on the
// thread. C# simplifies the creation of this delegate.
Thread t = new Thread(new ThreadStart(ThreadProc));
// Start ThreadProc. On a uniprocessor, the thread does not get
// any processor time until the main thread yields. Uncomment
// the Thread.Sleep that follows t.Start() to see the difference.
t.Start();
//Thread.Sleep(0);
for (int i = 0; i < 4; i++) {
Console.WriteLine("Main thread: Do some work.");
Thread.Sleep(0);
}
Console.WriteLine("Main thread: Call Join(), to wait until ThreadProc ends.");
t.Join();
Console.WriteLine("Main thread: ThreadProc.Join has returned. Press Enter to end program.");
Console.ReadLine();
}
}
此代码产生的输出类似如下内容:
Main thread: Start a second thread.
Main thread: Do some work.
ThreadProc: 0
Main thread: Do some work.
ThreadProc: 1
Main thread: Do some work.
ThreadProc: 2
Main thread: Do some work.
ThreadProc: 3
Main thread: Call Join(), to wait until ThreadProc ends.
ThreadProc: 4
ThreadProc: 5
ThreadProc: 6
ThreadProc: 7
ThreadProc: 8
ThreadProc: 9
Main thread: ThreadProc.Join has returned. Press Enter to end program.
.NET Framework 类库
Thread 类
创建并控制线程,设置其优先级并获取其状态。
命名空间:System.Threading
程序集:mscorlib(在 mscorlib.dll 中)
备注
一个进程可以创建一个或多个线程以执行与该进程关联的部分程序代码。使用 ThreadStart 委托或 ParameterizedThreadStart 委托指定由线程执行的程序代码。使用 ParameterizedThreadStart 委托可以将数据传递到线程过程。
在线程存在期间,它总是处于由 ThreadState 定义的一个或多个状态中。可以为线程请求由 ThreadPriority 定义的调度优先级,但不能保证操作系统会接受该优先级。
GetHashCode 提供托管线程的标识。在线程的生存期内,无论获取该值的应用程序域如何,它都不会和任何来自其他线程的值冲突。
注意
操作系统 ThreadId 和托管线程没有固定关系,这是因为非托管宿主能控制托管与非托管线程之间的关系。特别是,复杂的宿主可以使用 CLR Hosting API 针对相同的操作系统线程调度很多托管线程,或者在不同的操作系统线程之间移动托管线程。
下面的代码示例说明简单的线程处理功能。
using System;
using System.Threading;
// Simple threading scenario: Start a static method running
// on a second thread.
public class ThreadExample {
// The ThreadProc method is called when the thread starts.
// It loops ten times, writing to the console and yielding
// the rest of its time slice each time, and then ends.
public static void ThreadProc() {
for (int i = 0; i < 10; i++) {
Console.WriteLine("ThreadProc: {0}", i);
// Yield the rest of the time slice.
Thread.Sleep(0);
}
}
public static void Main() {
Console.WriteLine("Main thread: Start a second thread.");
// The constructor for the Thread class requires a ThreadStart
// delegate that represents the method to be executed on the
// thread. C# simplifies the creation of this delegate.
Thread t = new Thread(new ThreadStart(ThreadProc));
// Start ThreadProc. On a uniprocessor, the thread does not get
// any processor time until the main thread yields. Uncomment
// the Thread.Sleep that follows t.Start() to see the difference.
t.Start();
//Thread.Sleep(0);
for (int i = 0; i < 4; i++) {
Console.WriteLine("Main thread: Do some work.");
Thread.Sleep(0);
}
Console.WriteLine("Main thread: Call Join(), to wait until ThreadProc ends.");
t.Join();
Console.WriteLine("Main thread: ThreadProc.Join has returned. Press Enter to end program.");
Console.ReadLine();
}
}
此代码产生的输出类似如下内容:
Main thread: Start a second thread.
Main thread: Do some work.
ThreadProc: 0
Main thread: Do some work.
ThreadProc: 1
Main thread: Do some work.
ThreadProc: 2
Main thread: Do some work.
ThreadProc: 3
Main thread: Call Join(), to wait until ThreadProc ends.
ThreadProc: 4
ThreadProc: 5
ThreadProc: 6
ThreadProc: 7
ThreadProc: 8
ThreadProc: 9
Main thread: ThreadProc.Join has returned. Press Enter to end program.
追问
大哥 我是求具体实现
追答
你可以为每个邮箱写一个发送邮件的方法,然后针对这几个方法分别开个线程调用就行了,
我想你可能是要实现各邮箱自动发邮件的功能吧,这可能还需要用到定时器
展开全部
取得邮箱数量,for一个循环,循环次数等于你的邮箱数量,每个循环内实例化一个线程调用你的业务方法。具体线程如何使用baidu,祝你好运!原理就是上面的,可以用线程池
更多追问追答
追问
首先 先表示感谢 你没有明白我的意思。。我的意思是 利用线程管理发件箱 一个线程管理一个邮箱 最终实现多个邮箱同时登录 发送邮件。。就是这样 我语言功底比较差就是不知道怎么实现。。多线程例子 和发邮件的方法均已实现 就是不知道怎么把多线程嵌套进去
追答
你不是已经知道线程如何创建了吗,那么就写个for循环,实例化多个线程。
希望代码对你有帮助
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
Program p = new Program();
List listThread = new List(5);
Thread thread = null;
for (int i = 0; i < 5; i++)
{
thread = new Thread(new ThreadStart(p.ThreadMethod));
thread.Name = "Thread" + (i + 1);
Console.WriteLine("创建 Thread" + (i + 1));
listThread.Add(thread);
}
//关闭指定线程
foreach (Thread tempThread in listThread)
{
if (tempThread.Name == "Thread3")
{
Console.WriteLine(tempThread.Name + " 线程已关闭");
tempThread.Abort();
}
}
Console.ReadLine();
}
private void ThreadMethod()
{
}
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你是要实时发送邮件吗?如果是我这里有个现成的,我刚刚做完这个功能,也是用多线程做的,如果不是,我也懒得改代码了,你自己可以到网上找些代码自己去改改就可以了
更多追问追答
追问
我想要实现的是 同时能够登录多个邮箱 同时发邮件 就可以了我写的只能一次登录一个邮箱发邮件
追答
如果是这样的话lietou1986的思路是正确的,你可以考虑用线程池来实现
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询