【发布时间】:2010-10-19 23:12:04
【问题描述】:
我有一个方法可以像这样被调用到一个新线程中:
if (!_isPlaying)
{
_playBackThread = new Thread(PlayMacroEvents);
_playBackThread.Start();
...
}
方法如下:
Process proc = Process.GetProcessesByName("notepad").FirstOrDefault();
if (proc != null)
{
SetForegroundWindow(proc.MainWindowHandle);
}
int loopCount = this.dsUserInput.Tables[0].Rows.Count;
for (int i = 0; i < loopCount; i++)
{
foreach(MacroEvent macroEvent in _events)
{
Thread.Sleep(macroEvent.TimeSinceLastEvent);
switch (macroEvent.MacroEventType)
{
...
我遇到的问题是,如果记事本尚未启动(未最小化),则在设置前景窗口和宏输出之间有足够的延迟,通常第一系列命令不会显示。如何在宏开始启动之前暂停足够的时间以确保窗口已启动?在SetForegroundWindow() 和for 循环之间的Thread.Sleep() 似乎并不能解决问题。想法?
【问题讨论】:
-
其余代码会发生什么? “宏”如何影响记事本?另请阅读 MSDN 中 SetForegroundWindow() 的小字,它经常失败。
标签: c# multithreading macros