我有一个繁重的函数,它使用大量正则表达式将大型测试与富文本框匹配。
每次更改此文本(OnTextChangedEvent)都会调用此函数。 如果我快速写的话,这个功能会使整个程序瘫痪一段时间。
我想到了一些解决方案,例如:
哪个最好?我怎样才能将它应用到我的函数中?
答案 0 :(得分:1)
不应该从OnTextChanged调用这样的函数。使其在后台线程中运行,在完成后更新结果。想想Intellisense是如何工作的 - 它是由对代码的任何更改引发的,但只有在得到答案时才更新屏幕。
答案 1 :(得分:0)
我同意Loren的回答,但这里有更多的信息/选项。
首先,繁重的reg ex应该在不同的线程上运行,而不是使用GUI运行。
在OnTextChanged
上,设置全局脏位和时间戳(例如:dirty @ 20:00)。
你的后台线程可以选择这个,并在后台运行愉快,直到它完成,并更新GUI。一旦完成,它可以检查是否有任何脏位在它启动后或自上次完成后出现。
更好的方法可能是取消它的运行计算,如果更改使其正在执行的操作无效,但您没有提供足够的数据。
答案 2 :(得分:0)
你在征求意见。我的观点是,通过在单独的线程上运行它可以最好地解决这个问题。
过去我们会在空闲循环中完成它,但确实没有优势和相当多的痛苦。空闲循环仍然是一种合理的方式来做必须不断更新UI的事情,否则不值得麻烦。
你的其他建议无处可去。
但那只是我的意见。