首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

施行处理时程序卡死,能否用异步处理,望指教

2012-12-14 
执行处理时程序卡死,能否用异步处理,望指教…在一个timer控件的Tick事件中:private void timer1_Tick(objec

执行处理时程序卡死,能否用异步处理,望指教…
在一个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
[其他解释]
引用:
用线程执行,可以使得UI不会卡死

可以详细讲解下吗?您是指把myMethod方法放到线程中执行吗?谢谢…
[其他解释]
别用timer,timer不是异步的,将timer中代码放到线程中
[其他解释]
引用:
使用System.Threading.Timer

您好,我看了下关于3个timer控件的区别,System.Threading.Timer好象不适用于窗体程序
[其他解释]
using System.Threading
[其他解释]
引用:
别用timer,timer不是异步的,将timer中代码放到线程中

您好,我曾尝试过将方法体放到线程中执行,但这样后,myMethod方法中对窗体中控件属性的读取就会报错:指定的转换无效,请问这是为什么?
[其他解释]
System.Threading.Timer和System.Timers.Timer都不是基于UI线程的
不会卡死界面


[其他解释]
引用:
线程下 读写控件属性需要Invoke来实现
this.Invoke((EventHandler)delegate{
//读写属性代码段
});
或者设置Form的CheckForIllegalCrossThreadCalls = false
推荐Invoke

您好,我现在的不足之处是对异步没有较深入的了解,请问可以把这段详细讲解以下么:this.Invoke((EventHandler)delegate{


//读写属性代码段
});
谢谢……
[其他解释]
this.Invoke((EventHandler)delegate{
string s = txtItem.Text;
txtItem.Text = s;
});
[其他解释]
this.Invoke 实际还是在UI线程读写控件属性
[其他解释]

引用:
this.Invoke((EventHandler)delegate{
string s = txtItem.Text;
txtItem.Text = s;
});

您好,我的意思是这段代码是什么意思,为什么在多线程中要这样写才不会报错?麻烦讲解下,谢谢…
[其他解释]
.net默认非UI线程不能操作UI线程内的控件
读写都不行
this.Invoke实际是以EventHandler的方式注入到UI线程
类似于UI层的事件响应
[其他解释]
使用线程,如果要在线程中操作控件的话用Invoke

热点排行