【问题标题】:Background thread appears to be locking UI后台线程似乎正在锁定 UI
【发布时间】:2015-02-17 11:03:46
【问题描述】:

我有一个 Windows 窗体应用程序,它产生 24 个线程,每个线程从远程服务器上的文本文件中读取数据,并用内容填充数据库。每个线程以设定的时间间隔循环,直到更改标志以停止数据收集。

我的问题是FileIO.TextFieldParser 调用似乎稍微锁定了 UI。有时长达一两秒。这对我来说似乎很奇怪,但如果我删除那部分代码,则不会有 UI 干扰。将其重新添加并返回...

编辑:我已经用File.ReadAllLines 试过了,它仍然在发生

有什么想法吗?另外,有什么方法可以分析 UI 线程以确认这是/不是问题。

线程生成如下:

Dim thPoll = New Thread(Sub() mc.CollectData())
thPoll.Name = "ip_" & mc.IP
thPoll.IsBackground = True
thPoll.Priority = ThreadPriority.BelowNormal
thPoll.Start()

【问题讨论】:

    标签: .net multithreading file-io


    【解决方案1】:

    这可能取决于您如何运行后台线程。例如,BackgroundWorker 将事件发送到 UI 线程 (see here for an overview)。您可以尝试重新编码您的线程方法以使用不同的线程方法。

    您也可以尝试更改线程数,看看它是否对您的 ui 锁定有任何影响。

    【讨论】:

    • 我实际上并没有使用BackgroundWorker。如果您不介意看一下,我已将代码添加到我的问题中!
    • 嗯..对不起..不知道。这是一个疯狂的猜测,但是您能否查看任务管理器和资源消耗(如 cpu 负载)并检查您的 24 个进程是否消耗了如此多的资源,以至于您的整个系统可能会挂起?我可以想象的是,这 24 个线程在同一个实例中执行操作。如果是这种情况,您可以尝试使用信号量限制并发更新的数量。
    • 感谢您的建议,我会试一试!
    猜你喜欢
    • 2021-09-23
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多