假设有一个类A,它有2个方法M1,M2。M1因为定时器会周期性的执行,M2由用户操作引发执行。
问题是,程序执行的时候,一定会保证M1,M2的执行顺序吗?M1 M2或M2 M1,就像事务调度一样。
会不会在M2执行的过程中,M1开始执行呢?
如果Dotnet自身并不这样保证,那么怎么才能够实现这种需求呢?
如果是多线程,可以使用通过对象锁定进行线程同步,现在遇到的情况是M1,M2 均在一个线程中执行?不知道谁有这方面的经验,谢谢指教!
问题是,程序执行的时候,一定会保证M1,M2的执行顺序吗?M1 M2或M2 M1,就像事务调度一样。
会不会在M2执行的过程中,M1开始执行呢?
如果Dotnet自身并不这样保证,那么怎么才能够实现这种需求呢?
如果是多线程,可以使用通过对象锁定进行线程同步,现在遇到的情况是M1,M2 均在一个线程中执行?不知道谁有这方面的经验,谢谢指教!
解决方案 »
- 实现IComparer接口出现了问题?
- 如何实现 C# winfrm 遮盖 系统任务栏
- 散分&提问. 这段代码的效率很低,能不能优化下? 还是c# .net 的效率本身就提高不了?
- 已经得到excel的某个sheet,我将他复制到另一个excel文件中,怎么办啊?急等
- 为什么MemoryStream写不进字节数组
- windows服务程序的Installutil.exe安装问题
- Label透明问题,在线等
- 超级简单问题
- C#怎么传入一个函数参数?(C中的函数指针)
- 关于事件与变量联系的问题
- 大侠请进,将一个浮点数转换为IEEE浮点格式?急!!!100分相送。
- 用c# 作一个类似vs2003集合开发环境里界面设计的东东.
定时器控制的方法m1,
还是取决于这个定时器是否单独另开了一个线程,
如果是的话,才有可能m1,m2同时在执行,
如果不是,那当然要看进程执行时调用的先后顺序,而不是定义的先后顺序。
将M1,M2设置为互斥事件就可以解决你的问题。例如:设置bool locked具体是怎么做的,我不太明白。
你指的是lock(object)?,问题是M1,M2被在同一个线程执行时,lock好像不行。
加入M1,M2会操作同一个数据,如M1,M2同时对数组进行修改操作,这样就有可能出问题了。
但如果在进行中的方法中调用了Application.DoEvents(),则在此处阻塞并触发Timer事件(如果事件发生了的话),处理完事件再回来继续执行 private void button1_Click(object sender, EventArgs e)
{
timer1.Start();
while (this!=null)
//Application.DoEvents() ;
return;
} private void timer1_Tick(object sender, EventArgs e)
{
this.Text += "1";
}
{
while(true) Application.DoEvents();
}
你直接在M2/M1一开始判断M1/M2是否存在,存在就Join它,
没有明白你说的意思