Вот мой кодПри использовании SendKeys() - InvalidOperationException: Undo Операция встречается
public void KeyPress()
{
//Finds the target window and sends a key command to the application
Process[] processes = Process.GetProcessesByName("calc");
IntPtr calculatorHandle;
foreach (Process proc in processes)
{
calculatorHandle = proc.MainWindowHandle;
if (calculatorHandle == IntPtr.Zero)
{
MessageBox.Show("Calculator is not running.");
return;
}
SetForegroundWindow(calculatorHandle);
break;
}
SendKeys.SendWait("1");
}
После выполнения этого кода я получаю ошибку, я знаю, что источник является SendKeys.
Вот полная ошибка я получаю
System.InvalidOperationException was unhandled
Message="The Undo operation encountered a context that is different from what was applied in the corresponding Set operation. The possible cause is that a context was Set on the thread and not reverted(undone)."
Source="mscorlib"
StackTrace:
at System.Threading.SynchronizationContextSwitcher.Undo()
at System.Threading.ExecutionContextSwitcher.Undo()
at System.Threading.ExecutionContext.runFinallyCode(Object userData, Boolean exceptionThrown)
at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteBackoutCodeHelper(Object backoutCode, Object userData, Boolean exceptionThrown)
at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Net.ContextAwareResult.Complete(IntPtr userToken)
at System.Net.LazyAsyncResult.ProtectedInvokeCallback(Object result, IntPtr userToken)
at System.Net.Sockets.BaseOverlappedAsyncResult.CompletionPortCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped)
at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)
InnerException:
Я не уверен, что проблема есть, число появится в моем калькуляторе, но эта ошибка выскакивает
Эта ошибка не имеет ничего общего с 'SendKeys'. Что такое 'InnerException'? Вы выполняете асинхронный ввод-вывод? – SLaks
Используют сокеты для чего-либо в приложении? Похоже, что проблема связана с завершением работы асинхронного сокета. –
@ SLaks- Я считаю, что мы используем асинхронный ввод-вывод. Внутреннее исключение - NULL. @ Chris- Да, мы используем сокеты, передавая переменную, чтобы вызвать функцию. Приложение при нажатии кнопки на командном пункте вызовет функцию на клиенте. И используйте sendkeys для имитации нажатия кнопки в приложении на клиенте. Нужна дополнительная информация? – M0DC0M