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));
System.Threading.Timer定时器停止运行(失效)问题解决方法
一、现象 在一个WebAPI项目中某个方法Tools()里使用定时器 var timer = new System.Threading.Timer((unused) => { Console.WriteLine("1"); }, null, 0, 1000);//1秒一次 部署到IIS后,发现定时器老是失效,没有
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
使用定时器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
C#多线程 定时重复调用异步线程即System.Threading.Timer类使用小例
1.System.Threading.Timer计时器提供了一种重复调用异步线程的方法。.Net BCL中有多个Timer类,如用于Windows应用程序的System.Windows.Forms.Timer类,如可以运行在用户接口线程或工作线程上的System.Timers.Timer类。它们是很不一样的,这里要讲的System.Threading.Timer类是一种定时调用某个异步线程的类。每
Timer任务定时器如何终止
Timer类的对象有一个方法可以创建定时任务线程schedule(TimerTask task, long delay)但是自己实际操作后,发现程序运行完毕后,并不能终止这个定时任务线程。需要调用timer对象的cancel()方法才可以终止它。所以,在TimerTask类的子类中,我们可以把Timer对象通过构造方法传递进去作为成员属性,这样就可以在定时任务完成后,对这个Timer的对象进行进一...
解决IIS应用池回收造成Application_Start中定时执行程序停止的问题
最近在做一个项目,需要在程序中定时不断的执行某些操作,结果发现每天7,8点过后到第二天9点,定时程序经常都没有在执行,后来才知道由于IIS的应用池回收导致Application停止。 而这段时间又没有人再次访问网站,结果在Application_Start中的定时执行程序代码就没有再执行,在网上搜索一番,找到了解决办法,现和大家一起分享交流,原理就是在应用程序结束时发出一个Web请求访问网站,启
C# Timer定时器的用法(定时器的终止)
System.Timers.Timer query_interval = new System.Timers.Timer(7000);//查询间隔定时器,实例化Timer类,设置间隔时间为7000毫秒;
winform中多线程与定时器冲突
在winform中同时使用了定时器与多线程。 程序不稳定,有时会弹出异常System.InvalidOperationException。
C#Thread 使用后台 线程定时刷新 线程的使用 Thread的使用
C#Thread 使用后台 线程定时刷新 线程的使用 Thread的使用
Spring quartz 使用中的定时器,停滞问题
在spring中使用quartz,碰到定时器卡死,实际上并不是定时器卡死,而且上次任务没有退出。 项目中,单独建了一个文件管理quartz的配置  applicationContext-quartz.xml xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/200
.NET Framework中定时器timer的单线程与多线程使用讲解
如果你需要使用规律的时间间隔重复执行一些方法,最简单的方式是使用定时器(timer)。与下边的例子相比,定时器可以便捷、高效地使用内存和资源: ? 1 2 3 4 5 6 7 new Thread (delegate() {              while (enabled)              {         
关于C#线程中使用定时器timer无效
在线程中,开启定时器 timer.Start()时候,无法进入timer_Tick()事件。 ------------------------------------------------------------------- 解决方案: this.Invoke(new MethodInvoker(delegate                         {  
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
C#实现终止正在执行的线程
这篇文章主要介绍了C#实现终止正在执行的线程的方法,针对临界资源等容易出现错误的地方进行了分析,并提出了改进方案与实例,需要的朋友可以参考下. 本文实例讲述了C#实现终止正在执行的线程的实现方法,并针对一些容易出错的地方进行了深入分析,具体方法如下: 一般来说,很多人都会使用Abort方法来终止线程,其实这种做法并不可取!如果你的线程正在操作临界资源,很有可能会造成资源没有正确释放
c# timer定时器的关闭问题
1.开启public static Timer aTimer; public void SignalrLine() { SetTimerParam(); } private void test(object source,System.Timers.ElapsedEventArgs e) { ...
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#中的定时器的使用
在Framework中存在着4种定时器:其中分为两类, 多线程计时器 1:System.Threading.Timer 2:System.Timers.Timer 特殊目的的单线程计时器: 1:System.Windows.Forms.Timer(Windows Forms Timer) 2:System.Windows.Threading.Dispatcher
Timer&TimerTask在主线程中调用导致程序无法终止
如题,明明在该结束Time陷阱的时候加了cancel(),但是还是不能结束,试了一下,可利用System.gc()//加在cancel()后面!!!!!
python循环定时中断执行某一段程序的方法
问题说明   最近在写爬虫,由于单个账号访问频率太高会被封,所以需要在爬虫执行一段时间间隔后自己循环切换账号 所以就在想,有没有像单片机那样子设置一个定时中断,再定义一个中断入口,这样子每隔一段时间执行一次中断 当然不能用sleep,这样子整个进程就停在这了,而不是接着爬数据 解决方法 用到threading的Timer,也类似单片机那样子,在中断程序中再重置定时器,设置中断,pytho...
终结者:终止线程循环的方式
终结者:终止线程的方式
C#定时检查子线程是否执行完成(定时器检查)
定时器定时去检验子线程是否执行完成。如果完成关闭定时器,继续执行别的方法。 private volatile static FileReadManager uniqueInstance; private Timer _FileReadTimer = null; private Timer _PriorityFileReadTimer = null;
python使用threading.Timer实现线程循环任务定时器(一)
在进行爬虫系统开发的过程中遇到需要间隔一段时间就重复执行的任务的需求,就想实现一个线程服务在后台监控数据的抓取状态,要想实现定时循环任务的脚本可以使用linux下的crontab命令来执行,但是在一个项目里不太适用于使用这种办法,所以想启动一个线程来处理这类的小需求。在查找资料后发现可以使用 threading.Timer来实现这个代码如下:def func1(): print('Do som...
Winform基于多线程实现每隔1分钟执行一段代码
Winform基于多线程实现每隔1分钟执行一段代码
C# 定时执行函数(winForm)
需要使用timer 定时器控件 timer1.Interval 设置时间间隔timer1.Tick 到达时间间隔时触发事件test_tick 时间处理函数timer1.Tick   +=   new   System.EventHandler(test_Tick);   委托以处理事件 ,一般可以在Form 的构造函数 InitializeComponent构造界面组件函数中添加以
例说多线程定时器System.Timers.Timer
System.Timers.Timer是多线程定时器,如果一个Timer没有处理完成,到达下一个时间点,新的Timer同样会被启动,所以在使用Timer时需要注意。下面的实例显示了Timer的使用方法。using System; using System.Threading; using System.Windows;namespace TimerExp { /// <summary>
Java的Timer和TimerTask怎么结束
java中自带的定时器有Timer和TimerTask,但是运行起来要结束任务用cancel方法可以结束该任务,此时Timer线程还在运行,程序并没有退出,那么怎么结束Timer呢? 示例代码如下public class Test { public static void main(String[] args) { Timer timer = new Timer();
线程定时器
名称        timer_create - create a POSIX per-process timer 摘要        #include        #include        int timer_create(clockid_t clockid, struct sigevent *sevp,                         timer_t
SpringTask执行定时任务中调用方法中断问题
使用SpringQuartz轻量级定时任务时,出现任务中的方法调用链未执行完,也未抛出异常,然后到下一次时间就继续执行下一次的任务。最后debug调试是因为异常被捕获未在打印错误信息导致的。
c#中等待某个线程执行完后再执行某个线程
在方法的外部申请一个这样的变量 CountdownEvent latch = new CountdownEvent(3); 比如现在执行的是方法a public void a() { int si=0,ei=0; Thread thread = new Thread(() =&amp;gt; refreshData(si, ei)); thread .start();...
如何用python实现一个多线程定时器
因为自已要写一个和时间有关的方法,每过几秒钟之后要运行一个函数,但在主线程里写一个死循环来作定时器总是觉得不好。正好今天学习了一下python的多线程,可以拿来练手。写了下边的python定时器类,使用这个类你可以在你的代码中加入一个定时器。代码如下(pytimer.py):#!/usr/bin/env python # -*- coding: utf-8 -*- import threading
线程池之ScheduledThreadPool(周期、定时操作)
ScheduledThreadPool类使用场景:定时以及周期性执行任务的需求。 ScheduledThreadPool类说明:它可另行安排在给定的延迟后运行命令,或者定期执行命令,此类要优于 Timer。一旦启用已延迟的任务就执行它,但是有关何时启用,启用后何时执行则没有任何实时保证。按照提交的先进先出 (FIFO) 顺序来启用那些被安排在同一执行时间的任务。 ScheduledThrea
带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...
Timer异常后导致任务终止的解决方法
给客户做的系统里有几个Timer在定时执行 但是客户反应 某些数据没成功,于是看日志发现是由于Timer报错了,任务就终止了。 然后需要改成在Timer报错的时候还要继续执行任务,于是 catch 里面加代码,但是不是很好。 在网上找到一个 java.util.concurrent.ScheduledExecutorService; 于是看介绍修改原Timer的代码为
qt 启动新线程执行定时器
编写QT程序时,时常会需要使用定时器QTimer来执行一些定时任务,但当定时任务执行的时间过长,则会影响整个界面的响应,因此会想到使用另一个工作线程来执行定时器,一般情况下可以选择从QThread派生一个线程类,然后重载run并执行任务逻辑,那下面就介绍一个不用从QThread派生并使用QTimer的例子。 主窗口类头文件加入: QThread* _voiceThread; QTimer*
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
delphi 多线程定时执行程序如何写
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TSysChatMainForm = class(TForm) procedure FormCreate(Sender: TObject);
C# for,foreach 异步多线程问题
Parallel.ForEach 和 ForEach  与 Parallel.For 和 For 一样,一个是异步执行,开辟多个线程。一个是同步执行,开辟一个线程。 简单的循环 直接同步即可 要是循环读取或者写入数据库则 异步会更高效。    public void WindowsService()         {             var service = new Guara
WPF中DispatcherTimer定时器的原理
1.DispatcherTimer定时器不是单独开启一个线程来运行定时器方法,而是和主线程是同一个线程,只是通过改变运行优先级来实现定时器,当定时器时间到了,主线程就转去执行定时器方法。因此DispatcherTimer定时器不要用来实现执行时间长的任务,不然会使主线程很卡,导致WPF界面很看,是用不友好! 2.DispatcherTimer定时器第一次执行是先等待指定周期的时间再执行定时器方法
C#窗口关闭之后timer仍然在运行
C#窗口关闭之后timer仍然在运行
文章热词 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java学习线程的问题 区块链问题