在Winforms中用C#语言使一个方法在间隔时间内执行
我正在制作RSS阅读器,我希望它能够以给定的时间间隔进行更新. 我对使用Winforms计时器组件不感兴趣. 我更加考虑使用 System.Threading.Timer System.Threading.Timer . 我想在间隔上执行的方法看起来像: public void getNews() { for (int i2 = 0; i2
14 2024-04-26
编程技术问答社区
为什么我不能在WPF中从System.Threading.Timer回调中使用CapturePhotoToStreamAsync?
我在Winforms应用程序中具有代码,我正在使用WinRT MediaCapture对象从设备的相机中拍摄照片.该代码在system.threading.timer回电中执行.我正在尝试将此代码移至WPF中,但我遇到了问题.当我尝试执行MediaCapture.capturephototostostreamasync中的定时器回调,我会收到以下例外: 'system.exception'的第一个机会例外发生在myAssembly.dll 中 其他信息:该请求在当前状态无效. 开始 i可以创建一个用于执行方法1000次的循环,但是它将起作用,但是,如果从计时器回调中调用该方法,则会炸弹. 因此,为了澄清,该代码将在计时器回调中在Winforms中使用 该代码将在计时器回调中轰炸WPF 如果代码未在计时器回调中执行,则该代码将在WPF中使用. 我怀疑问题与正在执行的线程有关,但是,我尝试使用调度程序无济于事. 这是称为: 的方法 public a
6 2024-04-26
编程技术问答社区
C# 从定时器向原线程传递数据
这个问题可能是 问题:如何将计时器(System.Timers.Timer)事件的数据传递给创建计时器的线程(该线程可能不是Main线程,而是线程另一个线程由Main)? 我认为可能有一些实现这一目标的微不足道的方法.像BackgroundWorker ProgressChanged在创建工人的线程中调用事件,但在MSDN文档左右找不到方法.我见过的大多数示例在计时器线程中采取了一些操作( 编辑:我宁愿不使用Invoke()/InvokeRequired模式(cf. 如何将安全线程用于计时器(从不同线程更改计时器属性)),因为这不是对于表单应用程序.我很想通过创建BackgroundWorker来解决此问题,该BackgroundWorker以间隔向原始线程报告(DoWork将只是一个循环中的sleep()),但是想到.NET可能已经有一个问题,因此是问题. 解决方案 您会考虑使用当某些线程(也许不是主线程)创建您提到的计时器时,您也可以使用同一线程创建调度程序.之后,disp
10 2024-04-26
编程技术问答社区
可怕的嵌套定时器,我如何重构?
我已经由一个丑陋的13个参数组成的方法,但是我不知道如何将它们变成适当的spibthods并仍然完全相同,在三个迭代后停止,使用正确的参数,然后用一个不同的方法等.有人会朝着正确的方向帮助我吗? //Three part animation public void SetPlayerAnimation(int location, int x1, int y1, TimeSpan duration1, string sprite1, int x2, int y2, TimeSpan duration2, string sprite2, int x3, int y3, TimeSpan duration3, string sprite3, string endsprite) { //Get the sprite object to be animated TranslateTarget = "Sprite" + location.ToSt
18 2024-04-26
编程技术问答社区
如何异步递增定时器?
我试图通过单击按钮在按钮上异步更新计时器. 说示例我设置了时间= 60秒 ,几分钟后我运行程序时,计时器已达到45秒,当我单击按钮时,它应该在时间添加j = 15秒,并且计时器应不同步为60秒.请帮助 private int time = 60; DateTime dt = new DateTime(); private j = 15 ; private DispatcherTimer timer; public MainWindow() { InitializeComponent(); timer = new DispatcherTimer(); timer.Interval = new TimeSpan(0, 0, 1); timer.Tick += timer_tick; timer.Start(); } vo
8 2024-04-26
编程技术问答社区
秒表或计时器
我认为,当它从其_Tick()方法显示时间时,计时器不是很准确.我想在几分钟/秒内显示经过的时间,显示了一个过程所需的时间.我已经与计时器一起使用了此功能,但发现其计算不正确.这就是为什么我想问一下秒表会更好地显示更准确的表现,还是我应该完全使用的单独控制? private int timepassed = 0; private void buttonFourteen_Click(object sender, DragEventArgs e) { timer2.Start(); var backgroundWorker = new BackgroundWorker(); backgroundWorker.DoWork += (s, e) => { //Lengthy Procedure Goes Here }; backgroundWorker.RunWorkerCompleted += (s, e) => { timer2.Stop()
12 2024-04-26
编程技术问答社区
如何创建一个高级倒计时器
好吧,这个问题与这个问题有关,所以你们可以更好地理解它 如何将"时间"从datetime转换为int? 我的答案: txtAtiv.Text = dataGridView1.Rows[0].Cells[1].Value + ""; string value = dataGridView1.Rows[0].Cells[2].Value + ""; lblLeft.Text = value.Split(' ')[1]; textStatus.Text = ""; DateTime timeConvert; DateTime.TryParse(value, out timeConvert); double time; time = timeConvert.TimeOfDay.TotalMilliseconds; var timeSpan = TimeSpan.FromMilliseconds(time); lblSoma.Text = timeSpan.ToStri
14 2024-04-26
编程技术问答社区
在Windows XP中,当UI线程冻结时,System.Timers.Timer会冻结。
你好. 您很可能知道System.Windows.Forms.Timer当用户界面线程也冻结时会冻结其操作,因为它们在同一线程中运行. 迫使我使用System.Timers.Timer>又,如果用户界面冻结Timer继续运行其通常的过程,那么什么都没有发生. 好吧,我的应用程序对IE进行了分配,并且不时地浏览使用BAD JavaScript代码的网站时冻结.因此,还可以将我的应用程序用户界面与所有应用程序一起冻结,因为我的应用程序中的所有内容都在相同的Thread上运行.为了解决这个问题,我的应用程序不时对IE进程进行了简单的检查,以查看它们是否仍在响应,如果他们不终止,则所有这些都在另一个线程上. 此反动行动在Windows 7 32位上完美运行,但是当我在Windows XP计算机上运行应用程序时没有效果时,也许是因为当用户界面冻结时我的System.Timers.Timer也会冻结.一旦在另一个Thread上执行它,就不会发生这种情况,就像在Windows
14 2024-04-26
编程技术问答社区
我想在不使用控件的情况下,使图片框在一定时间后消失。
你好,我是C#的新手...我有一个我的控制框.它是要迅速单击的.我想这样做,因此,当它单击一定次时,第二个picturebox上有一个.gif,它就会看到.当一定的时间过去了,没有单击第一个picturebox,第二个就会消失.有没有办法做到这一点?也许有计时器.一些示例代码将对我有很大帮助!感谢所有事先! :) 解决方案 尝试以下方法: System.Windows.Forms.Timer timer1 = new System.Windows.Forms.Timer(); timer1.Interval=60000;//one minute timer1.Tick += new System.EventHandler(timer1_Tick); timer1.Start(); private void pictureBox1_Click(object sender, EventArgs e) { timer1.Stop(); timer1
8 2024-04-26
编程技术问答社区
C#-如何暂停应用程序,直到定时器完成?
我有一个我需要等待特定时间的应用程序,但是如果需要,我还需要能够取消当前操作.我有以下代码: private void waitTimer(int days) { TimeSpan waitTime = TimeSpan.FromDays(days); System.Timers.Timer timer = new System.Timers.Timer(waitTime.TotalMilliseconds); // Wait for some number of milliseconds timer.Enabled = true; timer.Start(); timer.Elapsed += new ElapsedEventHandler(OnTimedEvent); // Subscribe to event handler while (!TimerSettings.TimerFinished && !quitToken
10 2024-04-26
编程技术问答社区
我如何设置标签的内容并将其重置为字符串.
我没有真正的想法如何做到这一点,我尝试用计时器弄乱,但到目前为止无济于事. 所以我想做什么? 我有一个空白的标签.当触发某个事件时,我希望标签在5秒钟内说"竞争成功设置",然后我希望它返回空白. 肯定可以做到吗?它可以?我已经玩了一个计时器,但我似乎不合时宜. 最欢迎任何帮助.我的微弱尝试在下面. private void UpdateLabel(object sender, EventArgs e) { var timer = new Timer() { Interval = 5000, }; timer.Tick += (s, evt) => lblCompetitionSetupSuccess.Text = "Competition successfu
12 2024-04-26
编程技术问答社区
是否有一个适用于WebBrowser的Application.DoEvents()?
我正在使用 Timer 确定使用AJAX加载的页面是否准备就绪,并且仅在准备就绪时从函数中返回(加载包含Ajax的内容的页面加载).我正在尝试以下代码,但我发现 Application.DoEvents() 仅处理等待Windows消息循环项目,因此它会陷入无限循环,因为Applicadion.DoEvents()不会提高任何 webbrowser 's事件(但是我只有我提到的Windows One),所以 ReadyState t更新,永不改变. 我的问题是:有什么办法强制WebBrowser's事件Application.DoEvents()是否有? static bool done = false; int[] foo() { int[] data; timer1.Interval = 1000; timer1.Tick += new EventHandler(delegate(object o, EventArgs ea)
14 2024-04-26
编程技术问答社区
如何让定时器等待其处理程序中的代码完成执行,作为多线程问题的解决方案
这个问题来自最初发布的问题的开发在这里.问题在于编辑来自多线程的对象的属性. 应用程序的上下文如下: i有一个System.Timers.Timer对象,它在每个刻度上执行以下编号的项目.我需要使用计时器来完成此操作,因为我可能希望能够将tick间隔从1ms更改为60s. 在每个tick事件中: 运行一个背景工人从文件[ms的顺序](或url [秒数])读取数据) 当背景工作者从文件中读取数据时,请提高 事件(例如Ticker_Updated_Event) 在Ticker_Updated_Event的事件处理程序中,运行对象代码更新某个属性(例如this.MyProperty).在此事件处理程序中执行其他代码,包括更新GUI的电话[我相信我已经使线程安全(至少我希望)]. 已经提出了各种建议,包括使用共享变量和互锁,但我觉得最快的(?),也是在保持其余代码功能方面最强大的解决方案,我只是将我简单地强制Timer强加于等待其tick处理程序中的代码完成,然
10 2024-04-26
编程技术问答社区
如何在Winform中设置计时器以执行10+命令?
我有大约10个TX,RX命令,每个命令的时间间隔为100毫秒.因此,基本上应在每100毫秒内执行TXRX对.除非单击停止按钮.我在哪里错了? form1 btn_start 设置时间间隔以请求并接收消息 private void btn_Start_Click(object sender, EventArgs e) { Start(); } private void Start() { btn_Start.Enabled = false; btn_Stop.Enabled = true; int Interval = 100; if (CANTimer.Enabled == false) { // CAN Timer confinguration CANTimer.Enabled = true; C
22 2024-04-26
编程技术问答社区
定时器最小限制
我需要编写一个正在做一些事情的程序(.NET C#),但是每0.5 ms我都需要阅读一些数据,看看它是否更改为某个值或以上,以及该值是否已达到该目标,停止我在做的其他一切. 设置计时器每0.5毫秒运行是否存在问题? 这种程序的适当方法是什么? 解决方案 1 ms或0.5 ms? 汉斯是正确的,多媒体计时器接口能够向下提供1 ms分辨率. 参见获取和设置计时器分辨率(MSDN)和此有关timeBeginPeriod的更多详细信息.注意:别忘了呼叫 如何做: #define TARGET_RESOLUTION 1 // 1-millisecond target resolution TIMECAPS tc; UINT wTimerRes; if (timeGetDevCaps(&tc, sizeof(TIMECAPS)) != TIMERR_NOERROR) { // Error; application can't continue.
18 2024-04-26
编程技术问答社区
使用定时器延迟逐行读行方法 C#
我使用C#Windows表单使用Visual Studio2010.不要让控制台部分使您感到困惑,它是用户定义的东西而不是实际的控制台.因此,我有一种方法可以按行打印文件.我必须使它看起来很慢,因此我目前正在使用thread.sleep逐行打印来减慢速度.我无法使用它,因为它冻结了程序中的其他一些组件.我希望看看是否可以使用计时器完成.尽管我看到的所有示例都与计时器一起使用,通常会有一个计时器调用的方法.方法中间没有计时器延迟.所以我不确定如何在此处使用计时器. public void SlowPrint(string FileName) { string line; string tempFileName; string MyFilesDir = "..\\..\\myFolder\\"; tempFileName = Path.Combine(MyFilesDir, FileName); if (System.IO.File.E
22 2024-04-26
编程技术问答社区
C# Timer.Change方法
我需要创建一个函数,无论结果是什么,我都会通过MSDN库,并发现此 http://msdn.microsoft.com/en-us/library/yz1c7148.aspx ,我认为这是我需要的,但是我需要了解有关到期时间和周期参数的更多信息 为了我的理解: - 是时候等待开始计时器的时间吗? 时间是时候重复时间了吗? 我的问题是我对MSDN提供的计时器提供的理解是否正确.此外,如果我想设置每5秒钟的时间,无论以前的计时器是否完成或不设置什么? 解决方案 只需创建一个虚拟计时器即可每五秒钟打勾一次,然后使用BeginInvoke>. 其他解决方案 您的理解是绝对正确的.以下代码应执行您想要的事情: System.Threading.Timer timer = new System.Threading.Timer(Callback, null, 0, 5 * 1000); 但是,我应该提到哪个system.threading.timer不太准确,并且每个
12 2024-04-26
编程技术问答社区
设置一个过期的定时器事件
我需要测量收到最后一个数据包的时间差与新数据包到达时的时差.我尝试使用C#中的计时器类: while (listening) { if (hB != null) { interval = hB.GetHBInterval(); aTimer = new System.Timers.Timer(interval+5); Console.WriteLine("Interval is: {0}", interval); byte[] bytes = listener.Receive(ref groupEP); DecodeUDPMessage(Encoding.UTF8.GetString(byt
14 2024-04-26
编程技术问答社区
在settimer Windows API中使用回调方法的问题来自C#代码
我目前参与了一个将一些旧的VB6代码迁移到C#(.NET Framework 3.5)的项目.我的任务是只是进行迁移.任何功能增强或重构都将被推到项目的后期.不是理想的,但是你去了. 因此,VB6代码的一部分拨打了Windows API Settimer函数.我已经迁移了这个,无法使它起作用. 迁移的项目以DLL的形式构建;我创建了一个小型Winforms测试线束,该测试线束链接到DLL并调用有关代码.非常简单,只是为了证明可以进行呼叫. 迁移的DLL中的相关代码如下: [DllImport("user32.dll", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] public extern static int SetTimer(int hwnd, int nIDEvent, int uElapse, AsyncObjectCallerDelegate lpTimerFun
22 2024-04-26
编程技术问答社区