From 0a7ff8b140d0f36fafc020d1574373b19f82842a Mon Sep 17 00:00:00 2001 From: Eugene Wang <8755753+soukoku@users.noreply.github.com> Date: Fri, 7 Apr 2023 21:20:57 -0400 Subject: [PATCH] Tweak double buffer use in sample. --- samples/WinForm32/ControlExtensions.cs | 6 ++---- samples/WinForm32/Form1.cs | 22 ++++++++++++++++++---- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/samples/WinForm32/ControlExtensions.cs b/samples/WinForm32/ControlExtensions.cs index 8993568..ee36178 100644 --- a/samples/WinForm32/ControlExtensions.cs +++ b/samples/WinForm32/ControlExtensions.cs @@ -10,12 +10,10 @@ namespace WinFormSample { static class ControlExtensions { - public static void SetDoubleBuffered(this Control control, bool value) + public static void SetDoubleBufferedAsNeeded(this Control control) { - if (SystemInformation.TerminalServerSession) return; - var dbprop = control.GetType().GetProperty("DoubleBuffered", BindingFlags.NonPublic | BindingFlags.Instance); - dbprop!.SetValue(control, value); + dbprop!.SetValue(control, !SystemInformation.TerminalServerSession); } } diff --git a/samples/WinForm32/Form1.cs b/samples/WinForm32/Form1.cs index bca04eb..45230d2 100644 --- a/samples/WinForm32/Form1.cs +++ b/samples/WinForm32/Form1.cs @@ -1,3 +1,4 @@ +using Microsoft.Win32; using NTwain; using NTwain.Data; using System; @@ -34,7 +35,8 @@ namespace WinFormSample twain.TransferError += Twain_TransferError; twain.DeviceEvent += Twain_DeviceEvent; - capListView.SetDoubleBuffered(true); + capListView.SetDoubleBufferedAsNeeded(); + SystemEvents.SessionSwitch += SystemEvents_SessionSwitch; saveFolder = Path.Combine(Path.GetTempPath(), "ntwain-sample"); Directory.CreateDirectory(saveFolder); @@ -42,6 +44,18 @@ namespace WinFormSample this.Disposed += Form1_Disposed; } + private void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e) + { + switch (e.Reason) + { + case SessionSwitchReason.RemoteConnect: + case SessionSwitchReason.SessionUnlock: + case SessionSwitchReason.SessionLogon: + capListView.SetDoubleBufferedAsNeeded(); + break; + } + } + protected override void OnHandleCreated(EventArgs e) { base.OnHandleCreated(e); @@ -88,7 +102,7 @@ namespace WinFormSample private void Twain_DataTransferred(TwainAppSession sender, DataTransferredEventArgs e) { - Debug.WriteLine($"[thread {Environment.CurrentManagedThreadId}] data transferred with info {e.ImageInfo}"); + Debug.WriteLine($"[thread {Environment.CurrentManagedThreadId}] data transferred with info {e.GetImageInfo()}"); if (e.Data == null) return; using (var stream = new MemoryStream(e.Data)) using (var img = Image.FromStream(stream)) @@ -116,7 +130,7 @@ namespace WinFormSample private void Twain_CurrentSourceChanged(TwainAppSession sender, TW_IDENTITY_LEGACY ds) { - lblCurrent.Text = ds.ProductName; + lblCurrent.Text = ds.ToString(); if (twain.State == STATE.S4) { LoadCapInfoList(); @@ -291,7 +305,7 @@ namespace WinFormSample private void btnStart_Click(object sender, EventArgs e) { - twain.EnableSource(true, false); + twain.EnableSource(false, false); } } } \ No newline at end of file