在调用某个方法时如何为此方法超时时间?

zhmvb 2009-07-03 11:37:15
如题:

// 伪代码
string GetLedState()
{
string state = Led.GetState(DateTime.Now); //Led.GetString 有时需要1分钟左右才能返回数据,想在调用此方法的时候加个过期时间,请问如何做?
return state;
}


调用 Led.GetString 有时需要1分钟左右才能返回数据,想在调用此方法的时候加个过期时间,请问如何做?
...全文
72 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhmvb 2009-07-08
  • 打赏
  • 举报
回复
jdhlowforever 2009-07-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zgke 的回复:]
引用 4 楼 zhmvb 的回复:
最好不用线程,因为有无数次调用GetLedState,如果防到到线程中的话会创建很多个线程。另外在即时把GetLedStat防到线程中,如果GetLedStat正处于等待状态时运行_Thread.Abort(),实际上没没有结束Led.GetState(DateTime.Now)的等待状态,此时用frm.close()关闭程序后,他在操作系统中的进程中任存在,直到Led.GetState返回数据才¡­

线成和无数次调用GetLedState没关系..
如果你的GetLedState是非托管代码.可以考虑API来创建线程和终止线程.
[/Quote]
关注!
zhmvb 2009-07-07
  • 打赏
  • 举报
回复
能举个列子吗?
zhmvb 2009-07-06
  • 打赏
  • 举报
回复
up
mugenmn 2009-07-06
  • 打赏
  • 举报
回复
用异步
zhmvb 2009-07-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yongyinmg 的回复:]
最好用异步~BeginInvoke()~~~
[/Quote]

能举个例子吗?
zhmvb 2009-07-03
  • 打赏
  • 举报
回复
最好不用线程,因为有无数次调用GetLedState,如果防到到线程中的话会创建很多个线程。另外在即时把GetLedStat防到线程中,如果GetLedStat正处于等待状态时运行_Thread.Abort(),实际上没没有结束Led.GetState(DateTime.Now)的等待状态,此时用frm.close()关闭程序后,他在操作系统中的进程中任存在,直到Led.GetState返回数据才真正的退出。
jinlingoo1 2009-07-03
  • 打赏
  • 举报
回复
up1楼,学习.
不用线程的话,用timer吧,intervel高为60*1000
yongyinmg 2009-07-03
  • 打赏
  • 举报
回复
最好用异步~BeginInvoke()~~~
zgke 2009-07-03
  • 打赏
  • 举报
回复
使用线程来看看.

private void button3_Click(object sender, EventArgs e)
{
DateTime _StarTime = DateTime.Now;
Thread _Thread = new Thread(new ThreadStart(GetState));
_Thread.Start();

while (true)
{
TimeSpan _Span =DateTime.Now-_StarTime;

if (_Span.Seconds>10) //这里设置时间
{
_Thread.Abort();
}
Application.DoEvents();
}

}



public void GetState()
{
string state = Led.GetState(DateTime.Now);
}

zhmvb 2009-07-03
  • 打赏
  • 举报
回复
up
dean615 2009-07-03
  • 打赏
  • 举报
回复
关注
zgke 2009-07-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhmvb 的回复:]
最好不用线程,因为有无数次调用GetLedState,如果防到到线程中的话会创建很多个线程。另外在即时把GetLedStat防到线程中,如果GetLedStat正处于等待状态时运行_Thread.Abort(),实际上没没有结束Led.GetState(DateTime.Now)的等待状态,此时用frm.close()关闭程序后,他在操作系统中的进程中任存在,直到Led.GetState返回数据才¡­
[/Quote]
线成和无数次调用GetLedState没关系..
如果你的GetLedState是非托管代码.可以考虑API来创建线程和终止线程.
FlyBee 2009-07-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zgke 的回复:]
使用线程来看看.

        private void button3_Click(object sender, EventArgs e)
        {
            DateTime _StarTime = DateTime.Now;
            Thread _Thread = new Thread(new ThreadStart(GetState));
            _Thread.Start();

            while (true)
            {
                TimeSpan _Span =DateTime.Now-_StarTime;

                if (_Span.Seconds>10)  //这里设置时间
                {
                    _Thread.Abort();
                }
                Application.DoEvents();
            }
         
        }

     

        public void GetState()
        { 
              string state = Led.GetState(DateTime.Now);
        }


[/Quote]
up

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧