【问题标题】:System.Threading.Thread replacement in UWP / Windows 10 mobileUWP / Windows 10 移动版中的 System.Threading.Thread 替换
【发布时间】:2017-05-09 06:55:13
【问题描述】:

在 UWP 中,如何访问线程对象?我想更改我将管理的主线程和附加线程的名称。

之后我还要检查当前线程是不是主线程。

我的目标是 Windows 10 移动版。以下代码示例适用于桌面,但不适用于手机(获取 'System.DllNotFoundException'):

[DllImport("kernel32.dll")]
static extern IntPtr GetCurrentThread();

谢谢。

【问题讨论】:

    标签: windows-mobile uwp


    【解决方案1】:

    您应该使用任务而不是线程。 https://msdn.microsoft.com/en-us/library/system.threading.tasks.task%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

    关于重命名线程,你能告诉我为什么需要重命名主线程和其他线程!?

    【讨论】:

    • 是的,谢谢,在问这个问题之前我已经看过任务了。我的应用程序有一个恒定的工作线程。根据我的阅读,任务旨在用于单个异步操作。真的没有办法使用线程吗?
    • 任务不仅仅针对单个异步操作。您可以将任务用作线程。实际上在Task下面是Thread。因此,只需尝试从线程切换并使用任务。您可以启动一项任务,然后再启动其他任务。您不需要等到任务结束,只需启动它并忘记,而是提供一些机制让任务优雅地完成。为此,您可以使用任务取消令牌。
    • Ray,看看这个博客:blog.slaks.net/2013-10-11/threads-vs-tasks 它说:“由于任务仍然在线程池上运行,它们不应该用于长时间运行的操作,因为它们仍然可以填满线程“最终,我需要一个在应用程序的生命周期中保持活跃的线程。也许使用 LongRunning 选项创建任务是要走的路...
    • 你误会了。我不是拒绝使用它们。感谢您的回答,我正在结合我的建议检查此解决方案。
    • 正如我之前所说,我最终使用了长时间运行的任务。谢谢!
    【解决方案2】:

    您应该尝试 System.Environment.CurrentManagedThreadId(是的,您只能获取当前线程 id) https://msdn.microsoft.com/en-us/library/system.environment.currentmanagedthreadid(v=vs.110).aspx

    【讨论】:

      【解决方案3】:

      我们已经在博客上详细介绍了这一点(因为我们认为这是 .NET Standard 碎片化的不受欢迎的开始),并发布了用于 UWP/UAP 10、available on GitHub 和 @987654322 的开源 System.Threading.Thread 实现@。

      我希望这会有所帮助。

      【讨论】:

      • 很遗憾,它不包含 ThreadPool(使用 DedicatedThreadPool 并进行了一些小改动)
      【解决方案4】:

      在 UWP 中,您应该考虑使用 Windows.System.Threading namespace 中的类。但是,您会注意到有一个线程池,但没有直接等效于 Thread 类。

      请记住,UWP 不允许您只创建一个线程并让它永远运行是有原因的。这会让电池很容易耗尽,但也会妨碍应用暂停。

      UWP 有许多机制允许您执行在其他平台上可能通过使用专用线程来解决的各种事情。也许如果您告诉我们您认为需要线程的原因,我们可以帮助您解决实际问题?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-20
        • 2016-02-10
        • 2018-05-12
        • 1970-01-01
        • 2016-06-09
        • 1970-01-01
        • 2016-01-24
        • 1970-01-01
        相关资源
        最近更新 更多