C#面板/图像盒故障

C#面板/图像盒故障,c#,c++,wcf,dll,handle,C#,C++,Wcf,Dll,Handle,我在用C++/C#开发解决方案时遇到困难。 我有一个由Windows服务管理的DLL和一个通过WCF和套接字与此服务通信的用户应用程序。 DLL管理一个视频捕获板,它有一个函数,可以在窗口句柄(从picturebox或面板)中写入它捕获的视频 我试图做的是:创建一个picturebox,并通过WCF将句柄传递给使用此句柄调用DLL函数startpreview的服务 问题是:当我以用户应用程序的形式运行服务进程时,一切正常,但当我以Windows服务的形式运行时,startpreview函数不会写

我在用C++/C#开发解决方案时遇到困难。 我有一个由Windows服务管理的DLL和一个通过WCF和套接字与此服务通信的用户应用程序。 DLL管理一个视频捕获板,它有一个函数,可以在窗口句柄(从picturebox或面板)中写入它捕获的视频

我试图做的是:创建一个picturebox,并通过WCF将句柄传递给使用此句柄调用DLL函数startpreview的服务

问题是:当我以用户应用程序的形式运行服务进程时,一切正常,但当我以Windows服务的形式运行时,startpreview函数不会写入我的句柄

有人知道我该怎么解决这个问题? 致以最良好的祝愿

@编辑

此代码创建picturebox并附加到flowlayoutpanel。 这在通过WCF(WCFVideoMethods.ClientStartPreview)与服务通信的用户应用程序中执行

这是在服务上执行的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;
    }

StestPrimv(我需要写入句柄的方法)是C++ DLL方法的委托,我没有访问代码……/P>< P>您不能从Windows服务与桌面交互…远远不够。有一个“与桌面交互”选项,您可以在服务的“属性”窗口中设置它,但这有点古怪

我可以建议的另一种方法是,在服务中将图片缓冲区排队,并通过wcf/sockets公开api,以先进先出的方式发送缓冲区。
在您的应用程序上,您可以有一个计时器,它将获取这些缓冲区并将它们呈现在您的图片框中

显示一些示例代码,以便其他人能够理解您的问题,并得到正确的答案?是否要为windows服务添加GUI?否。很快,我想将服务写入windows窗体句柄。那么windows窗体句柄是由服务创建的吗?或从客户端程序传递?从客户端程序传递。服务通过客户端中调用的WCF方法接收句柄。其中一个参数是句柄。
 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;
    }