C#面板/图片盒故障
Trouble with C# Panel/Picturebox
我在C++/C#中开发解决方案时遇到问题。我有一个由Windows服务管理的DLL和一个通过WCF和套接字与该服务通信的用户应用程序。DLL管理视频捕获板,它有一个在窗口句柄(从图片框或面板)中写入正在捕获的视频的功能。
我想做的是:创建一个picturebox,并通过WCF将句柄传递给使用该句柄调用DLL函数startpreview的服务。
问题是什么:当我作为用户应用程序运行Service Proccess时,一切都很好,但当我作为Windows服务运行时,startpreview函数不会写入我的句柄。
有人知道我该怎么解决这个问题?顺致敬意,
@编辑
这段代码创建了picturebox并附加在流程布局面板上。这是在通过WCF(WCFVideoMethods.ClientStartPreview)与服务通信的用户应用程序中执行的
PictureBox videoPanel = new PictureBox();
videoPanel.Width = flpMonitor.Width;
videoPanel.Height = flpMonitor.Height;
/// Se for necessário invoke, invoca o metodo de adicionar um componente ao flowlayoutpanel
if (flpMonitor.InvokeRequired)
{
flpMonitor.Invoke(new MethodInvoker(delegate
{
flpMonitor.Controls.Add(videoPanel);
}));
}
/// Caso contrário, chama o método normalmente.
else
{
flpMonitor.Controls.Add(videoPanel);
}
/// Se for necessário invoke para o panel de video, invoca o metodo de inicializar o preview nele
if (videoPanel.InvokeRequired)
{
videoPanel.Invoke(new MethodInvoker(delegate
{
WCFVideoMethods.ClientStartPreview(selectedPos, videoPanel.Handle, new Rectangle(0, 0, videoPanel.Size.Width, videoPanel.Size.Height), true, 0x0080, 20, isAudioActive);
}));
}
/// caso contrário, chama o metodo normalmente.
else
{
WCFVideoMethods.ClientStartPreview(selectedPos, videoPanel.Handle, new Rectangle(0, 0, videoPanel.Size.Width, videoPanel.Size.Height), true, 0x0080, 20, isAudioActive);
}
这是在服务上执行的StartPreview方法
public Boolean StartPreview(int posNo, IntPtr _handle, Rectangle _rect, Boolean _ovl, int _format, int _rate, Boolean isAudioActive)
{
Boolean ret = true;
int channel = GetPosChannel(posNo);
if (!startPrev(channel, _handle, _rect, _ovl, _format, _rate))
{
ret = false;
}
if (isAudioActive)
{
if (!startAudioPrev(channel))
{
ret = false;
}
}
return ret;
}
startPrevi(我需要写入句柄的方法)是C++DLL方法的委托,我无法访问代码。。。。。
您无法从windows服务与桌面交互。。。远远不够。有一个与桌面交互的选项,您可以从服务的属性窗口中设置,但这有点古怪。
我可以建议的另一种选择是,在服务中对图片缓冲区进行排队,并通过wcf/sockets公开一个api,以先进先出的方式发送缓冲区。在你的应用程序上,你可以有一个计时器,它可以获得这些缓冲区,并在你的图片盒中渲染它们
相关文章:
- 分段故障(堆芯转储)矢量
- C++中的动态铸造故障
- 数组的指针从不分段故障
- vscode g++链路故障:体系结构x86_64的未定义符号
- 访问被拒绝后,c++中的故障保护代码
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 调试 CUDA MMU 故障
- Geeksforgeeks C 程序故障排除:IEE 754 表示法为十进制
- Arch Linux.AUR 包 mysql 不能用 makepkg 构建.错误:构建 () 中出现故障
- 正在处理故障(堆芯转储)
- 在 Boost::fiber 中引发的BOOST_ASSERT故障 Visual Studio "Debug" 构建
- 如何进行故障排除:未定义对"非虚拟 thunk to ..."的引用
- Qt creator 4.11,在应用程序输出面板中创建一个链接
- C++函数过载会导致 SEG 故障
- 分段故障 运行C++代码时出现 SIGSEGV
- 当新的故障时,是否有必要留出一些紧急内存?
- Python & C-C++ 扩展模块案例段故障
- 如何获取控制面板设置值,如字体大小
- 带升压的 SEG 故障::make_shared / 特征3 内存.h.
- C#面板/图片盒故障