我的问题可能不完全是关于实时处理的,但也可能是。
我的应用程序有几个比GUI更重要的线程,但我希望GUI至少可用。我不希望它一直被锁定,而且我想根据我正在执行的处理结果更新屏幕。
目前,我所有必要的项目都在单独的线程中进行隔离,并调用一个委托来显示结果。
我的GUI可以工作,但如果我更改选项卡或最小化/最大化它,已知会妨碍其他线程,以至于它们无法在它们所保持的0.1秒时间限制内执行其操作。
这是我调用代理的方法:
delegate void FuncDelegate(ResultContainer Result);
FuncDelegate DelegatedDisplay= new FuncDelegate(DisplayResults);
//then later on
Invoke(DelegatedDisplay, Result);
我大部分关键流程都是在连续循环中运行的线程,这些线程会从各种缓冲区(包括ArrayLists和普通的Lists)中读取和写入数据。
其中一个关键线程在每次使用以下方法启动:
Thread mythread = new Thread(new ThreadStart(ProcessResults));
mythread.Start();
我认为这样做的原因不是只有一个循环进行轮询,而是我担心这个轮询循环会消耗过多的资源(尽管每次轮询结果为负时我都使用Thread.Sleep(5))导致我的时间不足。
每次需要并发处理时启动一个新线程是否会浪费宝贵的时间?这应该使用循环吗?我的循环有问题吗?
我能否给一个线程分配比其他线程更高的优先级,或者Thread.Sleep是唯一的选择?如果我确实分配了更高的线程优先级,如何确保其他线程仍然可以存活?
简单的表单事件为什么会严重影响其他线程?有没有办法为GUI线程分配较低的资源?如果其他线程的时间不足,我能否使用Thread.Sleep阻止表单事件?
除了回答所有令人沮丧的问题之外,是否有某种线程分析器可用于帮助我解决混乱的情况?我尝试使用“Managed Stack Explorer”,但它似乎并不总是显示应用程序的线程。
任何对此事的帮助都将对我有所帮助。