我正在通过 COM 互操作在 C# 中使用 LogParser 2.2,并且希望能够让长时间运行的查询超时。
例如
var ctx = new COMIISW3CInputContextClassClass();
var log = new LogQueryClassClass();
var rs = log.Execute(qry, ctx);
log.Execute
如果通话时间过长,是否可以中断通话?我试过Thread.Abort()
了,但似乎 ThreadAbortException 一直等到 Execute 调用正常完成。
用于测试的代码Thread.Abort()
是:
var ctx = new COMIISW3CInputContextClassClass();
var log = new LogQueryClassClass();
ILogRecordset rs = null;
var t = new Thread(() =>
{
rs = log.Execute(qry, ctx);
});
t.SetApartmentState(ApartmentState.STA);
t.Start();
t.Join(100);
t.Abort();
// this tests if the file lock is still held by log parser
Assert.Throws<IOException>(() =>
File.OpenWrite(path));
t.join(10000);
// file is no longer locked
using (File.OpenWrite(path))
Assert.IsTrue(true);