C#线程问题,执行循环,定时器停止了 50C

我在软件中定义了一个定时器,循环执行一个方法
然后我在其他方法中又定义了一个循环,当循环执行时,定时器就停止执行了

有什么方法可以让定时器与循环同步执行

求大神帮忙解答

0

4个回答

建议你把代码贴出来,这样有助于分析到底是程序问题还是逻辑问题

0

public void StartRunTime(string strs)
{
AutomationElement deskTop = AutomationElement.RootElement; //桌面进程
var firstSC = deskTop.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ClassNameProperty, "WindowsForms10.Window.8.app.0.141b42a_r34_ad1"));
var secondSC = firstSC.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ClassNameProperty, "WindowsForms10.MDICLIENT.app.0.141b42a_r34_ad1"));
var thitdSC = secondSC.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ClassNameProperty, "WindowsForms10.Window.8.app.0.141b42a_r34_ad1"));
//MessageBox.Show(thitdSC.Current.Name);
var fourthSC = thitdSC.FindAll(TreeScope.Children, Condition.TrueCondition);
var fatherSC = fourthSC[7];
var fatherAll = fatherSC.FindAll(TreeScope.Children, Condition.TrueCondition);
var TCK = fatherAll[1];
/* TCK.GetType()*/
;
//MessageBox.Show(TCK.Current.NativeWindowHandle.ToString());

            int CRKJB = TCK.Current.NativeWindowHandle;

            //Thread.Sleep()
            //keywordinput[1]  句柄

            SetForegroundWindow((IntPtr)CRKJB);    //设置活跃窗口
            SendMessage((IntPtr)CRKJB, BM_CLICK, 0, 0);     //鼠标点击
            SendKeys.SendWait("^{a}");    //清空里面原有的数据
            SendKeys.SendWait(strs);   //发送数据

        var firstsSC = deskTop.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ClassNameProperty, "WindowsForms10.Window.8.app.0.141b42a_r34_ad1"));
        var secondsSC = firstSC.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ClassNameProperty, "WindowsForms10.MDICLIENT.app.0.141b42a_r34_ad1"));
        var thitdsSC = secondSC.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ClassNameProperty, "WindowsForms10.Window.8.app.0.141b42a_r34_ad1"));
        /ar fourthSC = thitdSC.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ClassNameProperty, "WindowsForms10.Window.8.app.0.141b42a_r34_ad1"));
        /ar fifthSC = fourthSC.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ClassNameProperty, "WindowsForms10.Window.b.app.0.141b42a_r34_ad1")); 
        //MessageBox.Show(thitdsSC.Current.Name);
        var thitdChildre = thitdsSC.FindAll(TreeScope.Children, Condition.TrueCondition);
        var FatherForm = thitdChildre[0];
        var fatherForm2 = FatherForm.FindAll(TreeScope.Children, Condition.TrueCondition);
        var YJTC = fatherForm2[3];                   //获取一键题词按钮
        var nextSX = thitdChildre[1];                //获取下一步 进入筛选 按钮
        InvokePattern btnYJTC = (InvokePattern)YJTC.GetCurrentPattern(InvokePattern.Pattern);   //点击一键题词按钮
        btnYJTC.Invoke();

    }
    private void timer1_Tick(object sender, EventArgs e)
    {
        //IntPtr FW = FindWindow(null, "提示");
        //IntPtr hwnd = FindWindowEx(FW, IntPtr.Zero, null, "&OK");
        //SendMessage(hwnd, BM_CLICK, 0, 0);


        IntPtr mainwind = FindWindow(null, "提示");
        IntPtr buttok = FindWindowEx(mainwind, IntPtr.Zero, null, "&OK");
        if (buttok!=IntPtr.Zero)
        {
            SendMessage(buttok, WM_LBUTTONDOWN, IntPtr.Zero, null);
            SendMessage(buttok, WM_LBUTTONUP, IntPtr.Zero, null);

            NextStep();
            SelectLenth();
        }

    }

    //执行
    private void button7_Click(object sender, EventArgs e)
    {

        for (int i = 0; i < strList.Count; i++)
         {
                    StartRunTime(strList[i]);

          }

    }
0

那你直接循环+延迟就可以了,为什么要定时器

0
hardtoking
hardtoking 回复caozhy: 我用循环加延迟试过,不过程序总会很卡
2 年多之前 回复

看代码视乎是你在timer中模拟发送了一个buttonclick事件,如果这样的话,你的button不处理完click,timer肯定是卡主的,
因为你用了SendMessage,SendMessage就是将线程卡主,直到处理完才往下走,你换成PostMessage试试呢?

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C#当线程停止后,由线程创建的定时器会继续执行
测试代码  class Program { static System.Timers.Timer timer; static void Main(string[] args) { Thread t = new Thread(new ThreadStart(ThreadProc));
使用定时器2秒后终止一个线程
使用最简便的方法终止线程。class Thread1 extends Thread{ private int count = 5; private String name; public Thread1(String name) { this.name=name; } public void run() { for (int i = 0
ASP.NET 定时执行任务 global.asax 执行一段时间后停止
using System;       using System.Data;       using System.Configuration;       using System.Collections;       using System.Web;       using System.Web.Security;       using System.Web.Ses
C#多线程 定时重复调用异步线程即System.Threading.Timer类使用小例
1.System.Threading.Timer计时器提供了一种重复调用异步线程的方法。.Net BCL中有多个Timer类,如用于Windows应用程序的System.Windows.Forms.Timer类,如可以运行在用户接口线程或工作线程上的System.Timers.Timer类。它们是很不一样的,这里要讲的System.Threading.Timer类是一种定时调用某个异步线程的类。每
解决IIS应用池回收造成Application_Start中定时执行程序停止的问题
最近在做一个项目,需要在程序中定时不断的执行某些操作,结果发现每天7,8点过后到第二天9点,定时程序经常都没有在执行,后来才知道由于IIS的应用池回收导致Application停止。 而这段时间又没有人再次访问网站,结果在Application_Start中的定时执行程序代码就没有再执行,在网上搜索一番,找到了解决办法,现和大家一起分享交流,原理就是在应用程序结束时发出一个Web请求访问网站,启
c# timer定时器的关闭问题
1.开启public static Timer aTimer; public void SignalrLine() { SetTimerParam(); } private void test(object source,System.Timers.ElapsedEventArgs e) { ...
C#Thread 使用后台 线程定时刷新 线程的使用 Thread的使用
C#Thread 使用后台 线程定时刷新 线程的使用 Thread的使用
winform中多线程与定时器冲突
在winform中同时使用了定时器与多线程。 程序不稳定,有时会弹出异常System.InvalidOperationException。
C# Timer定时器的用法(定时器的终止)
System.Timers.Timer query_interval = new System.Timers.Timer(7000);//查询间隔定时器,实例化Timer类,设置间隔时间为7000毫秒;
关于C#线程中使用定时器timer无效
在线程中,开启定时器 timer.Start()时候,无法进入timer_Tick()事件。 ------------------------------------------------------------------- 解决方案: this.Invoke(new MethodInvoker(delegate                         {  
C#实现终止正在执行的线程
这篇文章主要介绍了C#实现终止正在执行的线程的方法,针对临界资源等容易出现错误的地方进行了分析,并提出了改进方案与实例,需要的朋友可以参考下. 本文实例讲述了C#实现终止正在执行的线程的实现方法,并针对一些容易出错的地方进行了深入分析,具体方法如下: 一般来说,很多人都会使用Abort方法来终止线程,其实这种做法并不可取!如果你的线程正在操作临界资源,很有可能会造成资源没有正确释放
System.Threading.Timer定时器停止运行(失效)问题解决方法
一、现象 在一个WebAPI项目中某个方法Tools()里使用定时器 var timer = new System.Threading.Timer((unused) => { Console.WriteLine("1"); }, null, 0, 1000);//1秒一次 部署到IIS后,发现定时器老是失效,没有
Timer&TimerTask在主线程中调用导致程序无法终止
如题,明明在该结束Time陷阱的时候加了cancel(),但是还是不能结束,试了一下,可利用System.gc()//加在cancel()后面!!!!!
.NET Framework中定时器timer的单线程与多线程使用讲解
如果你需要使用规律的时间间隔重复执行一些方法,最简单的方式是使用定时器(timer)。与下边的例子相比,定时器可以便捷、高效地使用内存和资源: ? 1 2 3 4 5 6 7 new Thread (delegate() {              while (enabled)              {         
Spring quartz 使用中的定时器,停滞问题
在spring中使用quartz,碰到定时器卡死,实际上并不是定时器卡死,而且上次任务没有退出。 项目中,单独建了一个文件管理quartz的配置  applicationContext-quartz.xml xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/200
C#笔记(7)定时器重复任务
public System.Windows.Forms.Timer t = new System.Windows.Forms.Timer(); t.Interval = 1000;//定时周期1秒 t.Tick += new EventHandler(timerFun1);//到1秒了做的事件 t.Enabled = true; //是否不断重复定时器操作 t.Start();//开启定时器 voi
Timer任务定时器如何终止
Timer类的对象有一个方法可以创建定时任务线程schedule(TimerTask task, long delay)但是自己实际操作后,发现程序运行完毕后,并不能终止这个定时任务线程。需要调用timer对象的cancel()方法才可以终止它。所以,在TimerTask类的子类中,我们可以把Timer对象通过构造方法传递进去作为成员属性,这样就可以在定时任务完成后,对这个Timer的对象进行进一...
c#中的定时器的使用
在Framework中存在着4种定时器:其中分为两类, 多线程计时器 1:System.Threading.Timer 2:System.Timers.Timer 特殊目的的单线程计时器: 1:System.Windows.Forms.Timer(Windows Forms Timer) 2:System.Windows.Threading.Dispatcher
例说多线程定时器System.Timers.Timer
System.Timers.Timer是多线程定时器,如果一个Timer没有处理完成,到达下一个时间点,新的Timer同样会被启动,所以在使用Timer时需要注意。下面的实例显示了Timer的使用方法。using System; using System.Threading; using System.Windows;namespace TimerExp { /// <summary>
iOS 如何创建一个线程,要求可以一直工作,不会执行一次就结束
http://blog.csdn.net/hu_songsong/article/details/12845391 http://www.dreamingwish.com/frontui/article/default/ios-multithread-program-runloop-the.html 如何创建一个线程,要求可以一直工作,不会执行一次就结束。 @synthesize
c# System.Threading.Timer是多线程,并能同时执行
public static void RunTimerTimer(object Sender) { Console.WriteLine(String.Format("BeginSleep ID:{0} Tick:{1}", Thread.CurrentThread.ManagedThreadId, HUtil32.GetTickCount())); Thread.Sleep(200); C
C#定时检查子线程是否执行完成(定时器检查)
定时器定时去检验子线程是否执行完成。如果完成关闭定时器,继续执行别的方法。 private volatile static FileReadManager uniqueInstance; private Timer _FileReadTimer = null; private Timer _PriorityFileReadTimer = null;
C# 定时执行方法: System.Timers.Timer及Winform使用线程,委托定时更新界面UI控件,解决界面卡顿问题
System.Timers.Timer t = new System.Timers.Timer(5000); //设置时间间隔为5秒 private void Form1_Load(object sender, EventArgs e) { t.Elapsed += new System.Timers.ElapsedEventHandler(...
Winform基于多线程实现每隔1分钟执行一段代码
Winform基于多线程实现每隔1分钟执行一段代码
JavaScript(Jquery)中让网页停顿几秒或按时间循环执行(定时器,已解决,可直接执行!)
JavaScript(Jquery)中让网页停顿几秒或按时间循环执行(定时器,已解决,可直接执行!) function date_1() { alert('打开网页只执行一次过程函数!'); } function date_2() { alert('每隔3秒循环执行过程函数!'); } // s
带for循环代码的线程被interrupt后,依然会执行完for循环后代码的问题解决
当试图停止一个带有for循环的线程时,会出现如下“不想出现的情况”。线程类:public class ThreadInterruptTest1 extends Thread{ public void run(){ try { for(int i=0;i&amp;lt;500000;i++){ if(this.interrupted()){ System.out.println...
python循环定时中断执行某一段程序的方法
问题说明   最近在写爬虫,由于单个账号访问频率太高会被封,所以需要在爬虫执行一段时间间隔后自己循环切换账号 所以就在想,有没有像单片机那样子设置一个定时中断,再定义一个中断入口,这样子每隔一段时间执行一次中断 当然不能用sleep,这样子整个进程就停在这了,而不是接着爬数据 解决方法 用到threading的Timer,也类似单片机那样子,在中断程序中再重置定时器,设置中断,pytho...
C# 定时执行函数(winForm)
需要使用timer 定时器控件 timer1.Interval 设置时间间隔timer1.Tick 到达时间间隔时触发事件test_tick 时间处理函数timer1.Tick   +=   new   System.EventHandler(test_Tick);   委托以处理事件 ,一般可以在Form 的构造函数 InitializeComponent构造界面组件函数中添加以
wpf下定时器中断的使用
一、前言 WPF下使用定时器有两种,System.Windows.Threading.DispatcherTimer和System.Threading.Timer。 这两种的主要区别是: DispatcherTimer是运行在UI线程上的,最大的好处是可以在定时事件中修改UI元素,Timer是运行在独立的线程上的,与UI线程无关,如果需要修改UI控件,则必须委托给调度器this.Dispat...
C# 线程:定时器的使用
转载请注明出处:http://www.cnblogs.com/KeenLeung/p/3911556.html Timer类:设置一个定时器,定时执行用户指定的函数。 定时器启动后,系统将自动建立一个新的线程,执行用户指定的函数。 初始化一个Timer对象: Timer timer = new Timer(timerDelegate, s,1000, 1000);
C#中定时器的区别,单线程,多线程
原文链接
Timer异常后导致任务终止的解决方法
给客户做的系统里有几个Timer在定时执行 但是客户反应 某些数据没成功,于是看日志发现是由于Timer报错了,任务就终止了。 然后需要改成在Timer报错的时候还要继续执行任务,于是 catch 里面加代码,但是不是很好。 在网上找到一个 java.util.concurrent.ScheduledExecutorService; 于是看介绍修改原Timer的代码为
Python定时任务的启动和停止
在python中我们可以使用APScheduler进行定时任务。 APScheduler的具体编码这里就不介绍了。主要说下在终端中启动和停止任务。 一、运行计划任务的python脚本 如果我们在终端中直接执行的话,关闭终端窗口,Python任务就会中断,Python进程会被杀死,程序将停止运行。可以使用如下命令运行python脚本,python apschedulerscript.py &这样
C#多线程并行管理,通过Task实现,可随时暂停,继续以及停止等
C#多线程并行管理,通过Task实现,可对单个任务进行暂停,继续以及停止等操作,每个任务均有单独的进度条显示 同时执行的任务个数可以自行设置
线程定时器
名称        timer_create - create a POSIX per-process timer 摘要        #include        #include        int timer_create(clockid_t clockid, struct sigevent *sevp,                         timer_t
spring boot定时任务中新建线程如何做到可控终止
最近遇到这样的需求,要求是定时的执行任务,但是这些任务能够根据控制及时的停止。 首先定时任务可以直接使用spring中的schedule注解方式实现。那么如何控制已经启动的任务及时停止呢?   下面说一下思路。首先利用spring的schedule注解方式进行定时任务的执行。然后,在每个定时任务中使用新建线程的方式进行任务的执行。在新建线程的run方法中通过检测开关的状态,如果开关开启,则抛...
终结者:终止线程循环的方式
终结者:终止线程的方式
[libevent]事件主循环
libevent事件处理的中心部分——事件主循环,根据系统提供的事件多路分发机制执行事件循环,对已注册的就绪事件,调用注册事件的回调函数来处理事件。 事件处理主循环 libevent的事件主循环主要是通过event_base_loop ()函数完成的,其主要操作如下面的流程图所示,event_base_loop所作的就是持续执行下面的循环。    上图的简单描述就是: 校正系统当
关于Spring容器中定时器到时执行会出现两个线程同时执行的问题
quartz定时器同时执行两次,多线程同时执行
线程池之ScheduledThreadPool(周期、定时操作)
ScheduledThreadPool类使用场景:定时以及周期性执行任务的需求。 ScheduledThreadPool类说明:它可另行安排在给定的延迟后运行命令,或者定期执行命令,此类要优于 Timer。一旦启用已延迟的任务就执行它,但是有关何时启用,启用后何时执行则没有任何实时保证。按照提交的先进先出 (FIFO) 顺序来启用那些被安排在同一执行时间的任务。 ScheduledThrea
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java学习线程的问题 区块链问题