相关疑难解决方法(0)

使用Thread.Abort()有什么问题

所以我知道你不应该使用

Thread.Abort()
Run Code Online (Sandbox Code Playgroud)

但我从未得到过很好的解释.是否存在性能损失或隐藏的问题?

我知道你不能忽略/吞下ThreadAbortException(这是有道理的)

.net c# multithreading

62
推荐指数
5
解决办法
3万
查看次数

我们是否需要在使用后在C#中处置或终止线程?

我有以下代码:

        public static void Send(this MailMessage email)
    {
        if (!isInitialized)
            Initialize(false);
        //smtpClient.SendAsync(email, "");
        email.IsBodyHtml = true;

        Thread mailThread = new Thread(new ParameterizedThreadStart(
            (o) => 
            {
                var m = o as MailMessage;

                SmtpClient client= new SmtpClient("smtpserveraddress");
                client.Send(m);

            }));
        mailThread.Start(email);
Run Code Online (Sandbox Code Playgroud)

我希望邮件发送在后台完成而不会干扰主线程.它完蛋后我不在乎.

我是否需要以某种方式处理已创建线程(mailThread)的处理?或者它在完成工作后会自动处理?

请不要推荐SendAsync方法.我想手动创建线程.Mail.Send只是一个示例场景.

谢谢.

c# multithreading smtpclient

34
推荐指数
2
解决办法
4万
查看次数

C#Thread对象的生命周期

假设我有如下代码:

int Main()
{
    if (true)
    {
       new Thread(()=>
          {
              doSomeLengthyOperation();
          }).Start();
    }
    while (true)
    {
       //do nothing
    }
}
Run Code Online (Sandbox Code Playgroud)

有2个线程,我会打电话给主线程正在执行main()函数的线程,该线程被new'ed了里面的"如果"测试为主题A.

我的问题是,线程A什么时候被销毁?do doSomeLenghtyOperation()能够完成吗?

由于没有指向线程A的引用,它是否会被标记为垃圾收集的候选者:

  1. 紧接着"new Thread().Start()"语句本身完成了吗?
  2. 退出"if(true)"范围后立即?
  3. doSomeLengthOperation()运行完成后?
  4. 决不?

我看到的所有示例都是Main()持有引用,然后主线程在退出之前等待与线程A连接.我很好奇上面代码的生命周期是什么.

提前致谢!

c# multithreading object-lifetime

18
推荐指数
3
解决办法
8297
查看次数

新的Thread()和垃圾收集

我有以下代码:

new Thread(new ThreadStart(delegate()
{
    while (true)
    {
        //something
    }
})).Start();
Run Code Online (Sandbox Code Playgroud)

垃圾收集器Thread可以在Running状态下完成此实例吗?

c# multithreading garbage-collection

14
推荐指数
2
解决办法
6335
查看次数