Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public partial class Form1 : Form
- {
- SynchronizationContext Sc;
- public IAsyncEvent EventTo1C;
- public Form1()
- {
- InitializeComponent();
- // Так как у Формы уже есть Контекст то устанавливать новый контекст для потока не нужно
- // В других случаях нужно установить контекст
- // SynchronizationContext.SetSynchronizationContext(new WindowsFormsSynchronizationContext());
- Sc = SynchronizationContext.Current;
- }
- private async void button1_Click(object sender, EventArgs e)
- {
- var ПотокПриложения = Thread.CurrentThread.ManagedThreadId;
- // Для чистоты эксперимента вызовим события из потока отличного от потока приложения.
- // Что бы await не использовал текущий контекст установим ConfigureAwait(false)
- await Task.Delay(1000).ConfigureAwait(false); // делаем задержку в секунду и вызываем событие
- var ПотокСобытия = Thread.CurrentThread.ManagedThreadId;
- // Для вызова в тотоке приложения вызовем метод из его потока
- Sc.Send(d => EventTo1C.ExternalEvent("ДанныеИзТестВК", "Тест", string.Format("Поток Приложения={0} Поток события {1}",ПотокПриложения,ПотокСобытия)), null);
- // Если очень быстро кликать по кнопке то потоки события будут разными
- }
- private void Form1_FormClosed(object sender, FormClosedEventArgs e)
- {
- EventTo1C.ExternalEvent("ДанныеИзТестВК", "Тест","Окно Закрыто");
- // Marshal.Release(Marshal.GetIDispatchForObject(EventTo1C));
- // Marshal.ReleaseComObject(EventTo1C);
- EventTo1C = null;
- GC.Collect();
- GC.WaitForPendingFinalizers();
- }
- }
- public partial class Window1 : Window
- {
- dynamic Модуль1С;
- public Window1(dynamic модуль1С, dynamic Object1C)
- {
- InitializeComponent();
- Модуль1С = модуль1С;
- IExtWndsSupport n;
- n = (IExtWndsSupport)Object1C;
- IntPtr hwnd;
- n.GetAppMainFrame(out hwnd);
- var wih = new System.Windows.Interop.WindowInteropHelper(this);
- wih.Owner = hwnd;
- //Marshal.Release(Marshal.GetIDispatchForObject(Object1C));
- //Marshal.ReleaseComObject(Object1C);
- //Object1C = null;
- }
- private void button_Click(object sender, RoutedEventArgs e)
- {
- Модуль1С.СообщитьСтр(textBox.Text);
- }
- public static void СоздатьОкно(dynamic модуль1С, dynamic Object1C)
- {
- модуль1С.СообщитьСтр("Зашли в метод");
- var окно = new Window1(модуль1С, Object1C);
- окно.Show();
- модуль1С.СообщитьСтр("Форма открыта");
- }
- private void Window_Closed(object sender, EventArgs e)
- {
- Модуль1С.СообщитьСтр("Форма закрыта");
- Marshal.Release(Marshal.GetIDispatchForObject(Модуль1С));
- Marshal.ReleaseComObject(Модуль1С);
- Модуль1С = null;
- GC.Collect();
- GC.WaitForPendingFinalizers();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement