Я хочу sh запустить onSomeEvent()
в главном потоке, потому что я планирую получить доступ к Clipboard
, что можно сделать только в основном потоке. Если возможно, я sh буду делать это как консольное приложение. Я знаю, что мог бы сделать WPF
и обернуть вызовы в Control.Invoke()
, но я предпочитаю не использовать всю инфраструктуру просто для перемещения вызова метода между двумя потоками. Я сделал упрощенный пример ниже:
public static class Listener {
public static event Action onSomeEvent;
public static void Run() {
onSomeEvent?.Invoke();
}
}
public class Program {
public static void Main(string[] args) {
Console.WriteLine("Main thread id: " + Thread.CurrentThread.ManagedThreadId);
Listener.onSomeEvent += () => {
Console.WriteLine("onSomeEvent's ManagedThreadId: " + Thread.CurrentThread.ManagedThreadId);
};
Thread spawn = new Thread(() => {
Console.WriteLine("spawned thread's ManagedThreadId: " + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(1000);
Listener.Run();
});
spawn.Start();
Console.ReadLine();
}
}