
使用.NET 4.5 Developer预览版,RegEx类已得到增强,允许设置Timeout值,如果模式匹配存在问题,将阻止RegEx引擎挂起UI.
请求在.NET 4 Silverlight应用程序中实现类似功能的建议.
提前致谢.
解决方法 通用示例:public static R WithTimeout<R>(Func<R> proc,int duration){ var wh = proc.BeginInvoke(null,null); if (wh.AsyncWaitHandle.WaitOne(duration)) { return proc.EndInvoke(wh); } throw new TimeOutException();} 用法:
var r = WithTimeout(() => regex.Match(foo),1000);
更新:
正如Christian.K所指出的,异步线程仍将继续运行.
这是线程终止的地方:
public static R WithTimeout<R>(Func<R> proc,int duration){ var reset = new autoresetEvent(false); var r = default(R); Exception ex = null; var t = new Thread(() => { try { r = proc(); } catch (Exception e) { ex = e; } reset.Set(); }); t.Start(); // not sure if this is really needed in general while (t.ThreadState != ThreadState.Running) { Thread.Sleep(0); } if (!reset.WaitOne(duration)) { t.Abort(); throw new TimeoutException(); } if (ex != null) { throw ex; } return r;} 更新:
修复了上面的代码段以正确处理异常.
总结以上是内存溢出为你收集整理的c# – 在.NET 4中实现RegEx超时全部内容,希望文章能够帮你解决c# – 在.NET 4中实现RegEx超时所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)