0

这是我的场景,我有两个 sendkeys 应用程序(使用计时器),我将其重写为一个,但我有一个问题,例如,如果我启用 timer1,它将发送很多“q”直到我停止它,然后如果我启用 timer2,它将发送“1”然后“2”然后“3”。该过程的输出是

qqqqq123q123q123q123q123q123

这不是我想要的,在我合并两个发送键之前,输出会像这样

qqqq1qqq2qq3qqqqqq1q2q3qqqq1

两个计时器具有相同的间隔。当我将这两个计时器合并到一个 runnnig 应用程序时发生的事情就像 timer1 然后 timer2 然后 timer1 再次,他们喜欢交替过程而不是同时做。希望可以有人帮帮我。谢谢

4

1 回答 1

0

看看这个参考:http: //msdn.microsoft.com/en-us/library/system.windows.forms.timer.aspx

它说:

此 Windows 计时器专为使用 UI 线程执行处理的单线程环境而设计

所以这是单线程的,因为你的计时器的间隔是一样的。它们将按顺序处理。您应该改用 System.Threading.Thread。请参见下面的示例。您可以创建一个参数化线程对象,该对象将字符串参数作为 sendkeys 应该在该线程上发送的内容。并启动两个或更多线程。

using System;
using System.Threading;

// Simple threading scenario:  Start a static method running 
// on a second thread. 
public class ThreadExample {
    // The ThreadProc method is called when the thread starts. 
    // It loops ten times, writing to the console and yielding  
    // the rest of its time slice each time, and then ends. 
    public static void ThreadProc() {
        for (int i = 0; i < 10; i++) {
            Console.WriteLine("ThreadProc: {0}", i);
            // Yield the rest of the time slice.
            Thread.Sleep(0);
        }
    }

    public static void Main() {
        Console.WriteLine("Main thread: Start a second thread.");
        // The constructor for the Thread class requires a ThreadStart  
        // delegate that represents the method to be executed on the  
        // thread.  C# simplifies the creation of this delegate.
        Thread t = new Thread(new ThreadStart(ThreadProc));

        // Start ThreadProc.  Note that on a uniprocessor, the new  
        // thread does not get any processor time until the main thread  
        // is preempted or yields.  Uncomment the Thread.Sleep that  
        // follows t.Start() to see the difference.
        t.Start();
        //Thread.Sleep(0); 

        for (int i = 0; i < 4; i++) {
            Console.WriteLine("Main thread: Do some work.");
            Thread.Sleep(0);
        }

        Console.WriteLine("Main thread: Call Join(), to wait until ThreadProc ends.");
        t.Join();
        Console.WriteLine("Main thread: ThreadProc.Join has returned.  Press Enter to end program.");
        Console.ReadLine();
    }
}

这个例子来自:http: //msdn.microsoft.com/en-us/library/system.threading.thread.aspx

于 2013-04-10T07:03:38.623 回答