如何启动已停止的线程

2024-04-21

我创建一个新线程并从主线程启动它。

m_MyThread = new Thread(HandleMyThread);
m_MyThread.IsBackground = true;
m_MyThread.Start();

private void HandleMyThread()
{
    while (true)
    {
        Thread.Sleep(5000);
        return;
    }
}

5 秒后,该线程将完成并且其 ThreadState 为 Stopped。当用户单击按钮时我想再次启动它,但我得到了ThreadStateException (Thread is running or terminated; it cannot restart):

private void button1_Click(object sender, EventArgs e)
{
    m_MyThread.Start(); // ->raise exception
}

请帮助我如何重新启动已停止的线程。谢谢。


我知道这个问题有点老了,但我想我会发布回复以防其他人来到这里。

对于此示例代码,如果将其更改为如下所示:

Thread m_MyThread;
private void HandleMyThread()
{
    while (true)
    {
        Thread.Sleep(5000);
        return;
    }
}

private void button1_Click(object sender, EventArgs e)
{
    if (!m_MyThread.IsAlive)
    {
        m_MyThread = new Thread(HandleMyThread);
        m_MyThread.IsBackground = true;
        m_MyThread.Start();
    }
}

这将创建线程的一个新实例并启动它。这ThreadStateException错误的原因很简单,您无法重新启动处于停止状态的线程。m_MyThread.Start()仅对以下线程有效Unstarted状态。在这种情况下需要做的是创建一个新的线程实例并调用Start()在新实例上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何启动已停止的线程 的相关文章

随机推荐

  • 格式化 SQL IN 子句的字符串

    我需要格式化一个字符串并将其作为 SQL IN 子句的参数传递 例如 Select from Table Where X In param1 作为参数传入的文字字符串如下所示 Item1 Item2 Item3 这似乎不起作用 有什么建议么
  • 如何按顺序运行 Gulp 任务

    在这样的片段中 gulp task coffee gt gulp src src server coffee pipe coffee bare true on error gutil log pipe gulp dest bin gulp
  • 在javascript中计算日期差异

    我写下面的代码 var MS PER Day 24 60 60 1000 var utc1 Date UTC 1900 1 1 var utc2 Date UTC 2014 11 16 var x Math ceil utc2 utc1 M
  • 为什么JS假设没有时间的字符串日期如果填充0则为UTC,如果不填充则为本地? [复制]

    这个问题在这里已经有答案了 这很奇怪 但我确信有一个完美的解释 我和我的团队最近在使用时发现java 本地日期并以默认的字符串格式将其发送回前端 年 月 日 Javascript会自动创建一个日期 假设字符串是UTC 因此生活在ET区 它会
  • 访问窗口资源内的命名元素

    Problem 我正在尝试访问一个名为Runa 内的元素FlowDocument这是在窗口资源中定义的 为了澄清我的意思 请考虑以下代码
  • 为什么 JValue 保存在“动态”变量中,可分配给字符串变量,但在调用采用字符串参数的方法时不可用?

    这确实来自这个问题 循环遍历 JSON 数组并将项目添加到列表 C https stackoverflow com questions 64483744 looping through json array and adding items
  • IF 在应该返回 TRUE 时返回 FALSE

    我尝试做这样的事情 sub test a inputbox value1 b inputbox value2 c inputbox value3 if a b c then msgbox a else msgbox b msgbox c e
  • write.csv 精度 R

    我正在处理非常精确的数字 最大位数 我注意到write csv x 在 R 中有时会对数字进行四舍五入 有人注意到类似的事情吗 默认保存的位数是多少 正如文档中所写 在几乎所有情况下 数值量的转换都是受控制的 通过选项 scipen see
  • Swagger 用于 Asp.Net Mvc 网站

    我正在尝试构建一个微服务 Web 内容 api 它是一个简单的 ASP NET MVC Web 项目 我的问题是 如何创建一个主页 该主页是路由文档 就像 WEB API 的 swagger 一样 我有一个如下所示的 RouteConfig
  • 为什么 Hazelcast 尝试连接到另外两个端口

    我使用 IP 127 0 0 1 和端口 5701 启动 Hazelcast 为什么它尝试连接另外两个端口 5702 和 5703 它们的用途是什么 为什么连接失败 以下是我以编程方式配置的方法 Config config new Conf
  • 测试 React Redux - 无法读取未定义的属性或未定义的包装器

    我在为我的测试套件在组件中设置 Redux 存储时遇到了一些问题 问题是 即使我尝试未连接的挂载 测试也会在 authState 中查找变量时抛出错误 我有以下组件 import React Component from react imp
  • 预期间谍导航已使用 [ [ 'users' ] ] 调用,但在集成测试 Angular CLI 中从未调用过

    我在一个项目上实现了一个简单的集成测试 但它失败了 因为expect 行是在component save 方法之前执行的 当我将 Expect 行放在 setTimeout 上时 它会成功 没有setTimeout 如何成功 spec ts
  • Matlab多核

    我正在运行一种占用大量资源并最大化 CPU 的算法 问题是它只使用一个CPU 我怎样才能使MATLAB多线程计算并使用超过1个CPU 除非您专门使用并行结构 即使用显式并行性 或使用已经为您并行化的内置函数 否则 Matlab 将不会在多核
  • (再次)在独立脚本中使用 Django ORM

    我正在尝试在一些独立的屏幕抓取脚本中使用 Django ORM 我知道这个问题以前曾被问过 但我无法为我的特定问题找到一个好的解决方案 我有一个带有已定义模型的 Django 项目 我想做的是在我的抓取脚本中使用这些模型和 ORM 我的目录
  • 同步客户端-服务器数据库

    我正在寻找一些通用策略 用于将中央服务器上的数据与并不总是在线的客户端应用程序同步 在我的特定情况下 我有一个带有 sqlite 数据库的 Android 手机应用程序和一个带有 MySQL 数据库的 PHP Web 应用程序 用户将能够在
  • 如何避免选择 Internet Explorer 第一个按钮?

    我有一张带有多个文本字段和一个按钮的表单 当我输入其中一个文本字段时 提交按钮会突出显示 如果我在键入时按 Enter 键 则会按下该按钮 因此我会出现意外的行为 因为我的页面已提交 Firefox 不会这样做 是否有一些属性或配置可以避免
  • Xcode C++ 和 Objective-C 重构

    有没有办法refactorXcode 中的混合 C Objective C 代码 我正在使用 Cocos2D 和 Box2D 编写游戏 而 Box2D 是用 C 编写的 因此我编写的每个类都应该具有 mm 扩展名 因此当我尝试例如重命名变量
  • 如何强制增量 Foundry Transforms 作业以非增量方式构建而不影响语义版本?

    如何强制特定数据集以非增量方式构建而不更改转换存储库中的语义版本 有关我们具体用例的详细信息 我们有大约 50 个数据集 由单个增量 Python 通过手动注册和 for 循环定义 此转换的输入可以是 100 到 10000 个小 gzip
  • 在 PHP 中生成 wav 音调

    我想在 php 中生成正弦音 但是构建我的 wav 时我需要给出以字节为单位的值 我不知道该怎么做 这是我的代码 freqOfTone 440 sampleRate 44100 samplesCount 80000 amplitude 0
  • 如何启动已停止的线程

    我创建一个新线程并从主线程启动它 m MyThread new Thread HandleMyThread m MyThread IsBackground true m MyThread Start private void HandleM