C# 向方法添加计时器的简单方法是什么
下面是C# 我正在尝试做一些非常简单的事情(我想)。我有一个加载XML文档的方法C# 向方法添加计时器的简单方法是什么,c#,timer,asynchronous,C#,Timer,Asynchronous,下面是C# 我正在尝试做一些非常简单的事情(我想)。我有一个加载XML文档的方法 XDocument doc = XDocument.Load(uri); ,但如果存在问题(连接性、文档大小等),我不想占用pc资源 因此,我希望能够添加一个timeout变量,该变量将在给定的秒数后切断该方法。当谈到异步编程时,我是一个新手,我发现有这么多的例子以这么多不同的方式编写,这让我感到困惑。而且没有一个看起来简单。如果可能的话,我想要一个简单的解决方案 到目前为止,我对可能的解决途径有以下想法: (
XDocument doc = XDocument.Load(uri);
,但如果存在问题(连接性、文档大小等),我不想占用pc资源
因此,我希望能够添加一个timeout变量,该变量将在给定的秒数后切断该方法。当谈到异步编程时,我是一个新手,我发现有这么多的例子以这么多不同的方式编写,这让我感到困惑。而且没有一个看起来简单。如果可能的话,我想要一个简单的解决方案
到目前为止,我对可能的解决途径有以下想法:
(一)
包装现有负载的方法
public XDocument LoadXDocument(string uri, int timeout){ //code }
(二)
包装器,但作为扩展方法
XDocument doc = XDocument.LoadWithTimeout(string uri, int timeout);
(三)
通用扩展方法
Object obj = SomeStaticClass.LoadWithTimeout(??? method, int timeout);
3) ,从表面上看,它似乎真的很好,因为这意味着能够为许多不同的方法调用添加超时,而不是专门绑定到一种类型的对象,但我怀疑这要么是I)不可能的,要么是ii)非常困难的
请帮忙。谢谢。这是Windows还是Web?请重新标记 如果windows,为什么不使用后台工作线程在与主线程不同的线程中执行该方法?例如,使用进度条让用户知道它正在工作。。。完成后,如果需要,提醒用户 在Web中我也会这样做,只需将该方法添加到一个全新的页面中,然后使用jQuery,例如,使用
$。get
异步运行该方法
或者我错过了什么
从
mwilson
回答中,我认为您希望真正强制超时,而不是使用该方法的内部超时/错误
我不会删除我的答案,而是让别人使用它。这应该给你一个很好的起点
public static XDocument GetDoc(string uri, int timeout)
{
var result = default(XDocument);
{
using (var client = new WebClient())
using (var complete = new ManualResetEvent(false))
{
client.DownloadStringCompleted += (sender, e) =>
{
try
{
if (!e.Cancelled)
{
result = XDocument.Parse(e.Result);
}
}
finally
{
complete.Set();
}
};
client.DownloadStringAsync(new Uri(uri));
Thread.Sleep(timeout);
if (!complete.WaitOne(1))
{
client.CancelAsync();
}
complete.WaitOne();
}
}
return result;
}
缺少编程语言。闻起来像C。你能这样重新标记吗?当你说“强制超时而不是使用内部超时/错误”时,你指的是什么?齐奥科斯的回答就是一个例子吗?