我的应用程序上有一个按钮,其单击事件:
private void btn_Click(object sender, EventArgs e)
{
btn_DoMyAction();
}而btn_DoMyAction是
private void btn_DoMyAction()
{
//lock (_lock) //--> Is this necessary
{
...
... //long code block(I mean non automic)
...
}
}我从单击事件和windows计时器滴答调用btn_DoMyAction
private void myTimer_Tick(object sender, EventArgs e)
{
btn_DoMyAction();
}我有两个问题:
) lock在btnProcessNextBandBarcode_DoMyAction中是必要的(我是在问第一个问题,因为就我调试而言,它似乎是队列调用,并且锁似乎是不必要的)
2-) I want to skip thread instead of queue on tick or button click 另一个问题是:
btn_DoMyAction是从线程调用的(无定时器),我应该如何采取行动实现自动化?发布于 2017-07-23 12:39:52
此Windows计时器设计用于单线程环境,其中UI线程用于执行处理。
所以您不必使用lock,因为btn_Click和myTimer_Tick在同一个线程中执行。
附加问题:如果从另一个线程调用btn_DoMyAction,则应该使用lock,因为它可能是从UI线程和另一个线程调用的。
编辑:
System.Threading.Timer应该可以--您可以在执行结束时(当由计时器引起的执行时)启动计时器。https://stackoverflow.com/questions/45264910
复制相似问题