using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms;
namespace 函数执行超时研究 { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void button2_Click(object sender, EventArgs e) { string name = ""; Thread threadToKill = null; Action wrappedAction = () => { threadToKill = Thread.CurrentThread; name = DoWork1(3); };
IAsyncResult result = wrappedAction.BeginInvoke(null, null); if (result.AsyncWaitHandle.WaitOne(3000)) { wrappedAction.EndInvoke(result); } else { threadToKill.Abort(); throw new TimeoutException(); }
MessageBox.Show(name); }
private void button1_Click(object sender, EventArgs e) { CallWithTimeout(DoWork,4000); } public void DoWork() { Thread.Sleep(3000); } public string DoWork1(int num) { Thread.Sleep(2000); return "hello"; }
/// <summary> /// 执行函数超时,Action表示委托,函数没有参数没有返回值 /// </summary> /// <param name="action"></param> /// <param name="timeoutMilliseconds"></param> void CallWithTimeout(Action action, int timeoutMilliseconds) { Thread threadToKill = null; Action wrappedAction = () => { threadToKill = Thread.CurrentThread; action(); };
IAsyncResult result = wrappedAction.BeginInvoke(null, null); if (result.AsyncWaitHandle.WaitOne(timeoutMilliseconds)) { wrappedAction.EndInvoke(result); } else { threadToKill.Abort(); throw new TimeoutException(); } }
} } |
[C#][原创]函数执行超时研究
最新推荐文章于 2023-06-06 17:38:02 发布