执行处理时程序卡死,能否用异步处理,望指教…
在一个timer控件的Tick事件中:
private void timer1_Tick(object sender, EventArgs e)
{
var myVar=myMethod();//myMethod方法用于审查信息返回一个值
if(myVar!=null)
{
//下面执行需要的操作
}
}
现在的问题是myMethod方法在执行逻辑处理的时候会导致程序卡死一段时间,我现在想能不能用异步处理,当myMethod方法执行完毕后 在执行下面的操作,请问这个该怎么实现,或者有没有其他的办法,望指教,谢谢!
------最佳解决方案--------------------线程下 读写控件属性需要Invoke来实现
this.Invoke((EventHandler)delegate{
//读写属性代码段
});
或者设置Form的CheckForIllegalCrossThreadCalls = false
推荐Invoke
------其他解决方案--------------------使用线程加委托,
这样界面就不会卡死
------其他解决方案--------------------全放到线程里即可:
new Thread(() =>
{
var myVar = myMethod();
if (myVar != null)
{
}
}).Start();
------其他解决方案--------------------用线程执行,可以使得UI不会卡死
------其他解决方案--------------------使用System.Threading.Timer
------其他解决方案--------------------
可以详细讲解下吗?您是指把myMethod方法放到线程中执行吗?谢谢…
------其他解决方案--------------------别用timer,timer不是异步的,将timer中代码放到线程中
------其他解决方案--------------------
您好,我看了下关于3个timer控件的区别,System.Threading.Timer好象不适用于窗体程序
------其他解决方案--------------------using System.Threading
------其他解决方案--------------------
您好,我曾尝试过将方法体放到线程中执行,但这样后,myMethod方法中对窗体中控件属性的读取就会报错:指定的转换无效,请问这是为什么?
------其他解决方案--------------------System.Threading.Timer和System.Timers.Timer都不是基于UI线程的
不会卡死界面
------其他解决方案--------------------
您好,我现在的不足之处是对异步没有较深入的了解,请问可以把这段详细讲解以下么:this.Invoke((EventHandler)delegate{