|
|
@@ -1,6 +1,7 @@
|
|
|
using ivf_tl_CustomControls;
|
|
|
using ivf_tl_Entity.CameraEntitys;
|
|
|
using ivf_tl_Entity.GlobalEnums;
|
|
|
+using ivf_tl_Operate.Debug;
|
|
|
using ivf_tl_Operate.ViewModel;
|
|
|
using ivf_tl_Operate.Windows;
|
|
|
using Newtonsoft.Json.Linq;
|
|
|
@@ -41,6 +42,9 @@ namespace ivf_tl_Operate.View
|
|
|
/// </summary>
|
|
|
private bool isOpen = false;
|
|
|
|
|
|
+ /// <summary>D2-02 第二阶段:MJPEG 预览客户端(一次性,每次开预览 new 新实例)。</summary>
|
|
|
+ private MjpegStreamClient _mjpeg;
|
|
|
+
|
|
|
private object locker = new object();
|
|
|
|
|
|
//#bdbdbd #bfd87d
|
|
|
@@ -206,19 +210,21 @@ namespace ivf_tl_Operate.View
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
- if (isOpen)
|
|
|
- {
|
|
|
- AddMessageInfo($"图像已打开");
|
|
|
- return;
|
|
|
- }
|
|
|
- IntPtr hwnd = ((System.Windows.Interop.HwndSource)PresentationSource.FromVisual(AppData.Instance.MainWindow)).Handle;
|
|
|
- //var a = vm.camera.Usb2Start(hwnd, 328, 865, 800, 600);
|
|
|
- var a = vm.StartPreview(hwnd, 328, 805, 800, 600);
|
|
|
- AddMessageInfo($"图像打开结果:{a}[注:0表示成功]");
|
|
|
- if (a == 0)
|
|
|
+ if (isOpen) { AddMessageInfo($"图像已打开"); return; }
|
|
|
+ string sessionId = vm.CurrentSessionId;
|
|
|
+ if (string.IsNullOrEmpty(sessionId)) { AddMessageInfo("未借用会话,无法预览(请先初始化)"); return; }
|
|
|
+
|
|
|
+ // 每次开预览 new 新实例(MjpegStreamClient 一次性,不可复用)
|
|
|
+ _mjpeg = new MjpegStreamClient(ivf_tl_Operate.Helpers.ControlClient.BaseUrl);
|
|
|
+ _mjpeg.FrameReceived += img => Dispatcher.Invoke(() => { _previewImage.Source = img; });
|
|
|
+ _mjpeg.Stopped += reason => Dispatcher.Invoke(() =>
|
|
|
{
|
|
|
- isOpen = true;
|
|
|
- }
|
|
|
+ isOpen = false;
|
|
|
+ AddMessageInfo($"⚠ {reason}"); // 明确提示操作人员手动重开(不自动重连)
|
|
|
+ });
|
|
|
+ _mjpeg.Start(sessionId);
|
|
|
+ isOpen = true;
|
|
|
+ AddMessageInfo("图像已打开(MJPEG 实时预览)");
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
@@ -231,17 +237,12 @@ namespace ivf_tl_Operate.View
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
- if (!isOpen)
|
|
|
- {
|
|
|
- AddMessageInfo($"图像未打开,无需关闭");
|
|
|
- return;
|
|
|
- }
|
|
|
- var a = vm.StopPreview();
|
|
|
- AddMessageInfo($"图像关闭结果:{a}[注:0表示成功]");
|
|
|
- if (a == 0)
|
|
|
- {
|
|
|
- isOpen = false;
|
|
|
- }
|
|
|
+ if (!isOpen) { AddMessageInfo($"图像未打开,无需关闭"); return; }
|
|
|
+ _mjpeg?.Stop();
|
|
|
+ _mjpeg = null; // 丢弃实例(一次性,下次开预览 new 新的)
|
|
|
+ Dispatcher.Invoke(() => { _previewImage.Source = null; });
|
|
|
+ isOpen = false;
|
|
|
+ AddMessageInfo("图像已关闭");
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|