我们需要使用第三方ActiveX控件.
唯一的问题是,我们软件中的图层是业务层,无法访问窗口或表单.它还运行在不是STA的单独线程上(并且应该在任何线程中工作).
我们使用此解决方法使其工作,而不是将UI与业务逻辑分开.
Thread thread = new Thread((ThreadStart)
delegate
{
_myActiveX = new MyActiveXType();
_myActiveX.CreateControl();
//more initialize work
Application.Run();
});
thread.SetApartmentState(ApartmentState.STA);
thread.IsBackground = true;
thread.Start();
Run Code Online (Sandbox Code Playgroud)
然后,只要我们需要引用控件,我们调用_myActiveX.BeginInvoke()或Invoke().
在处理这个类(退出我们的应用程序)时,我们处理控件并中止线程.
我的问题是,这有什么问题吗?有没有更好的方法来处理这个?
在未知的多线程环境中有没有更好的内置方法来使用ActiveX控件?我们试图以包装控件的方式编写我们的类,但是可以在任何线程中工作.
更新:作为一个答案建议,我们真的宁愿使用标准COM对象,而根本不使用控件.我们的问题是我们会在我们调用COM对象的第一个方法或属性上得到错误"(来自HRESULT的异常:0x8000FFFF(E_UNEXPECTED)".这是一个非常一般的错误,我们在使用ActiveX时没有得到这个错误, 有任何想法吗?
更新:我们的ocx是"CX25.ocx",使用tlbimp.exe我们得到CX25Lib.dll.使用aximp.exe,我们得到AxCX25Lib.dll和CX25Lib.dll.在任何一种情况下CX25Lib.dll都不起作用.AxCX25Lib.dll可以使用.
我在 Windows 服务 (0) 会话中运行了一项服务。从客户端连接后,我需要为给定的用户凭据创建一个新的 Windows 会话,登录该用户并在此新会话中启动应用程序。
有没有办法以编程方式为给定的用户凭据创建用户会话?
我想知道是否有办法以编程方式在Windows Server上创建和启动远程桌面会话.
我正在尝试创建一个自动工具来创建本地用户,然后启动关联RDP会话.我已经创建了LocalUser并将它们添加到远程桌面用户(使用net.exe).但我对下一步感到震惊:创建并启动用户的rdp-session.如果没有远程桌面客户端Gui,我不知道如何处理这个问题.
我正在使用Windows Server 2003,而我正在使用VS2008和.NET 3.5.
问候.
我有一个 Windows 服务,它可以通过调用“CreateProcessAsUser”函数在用户 Windows 会话中创建一个可执行文件。只要那里已经有一个 Windows 会话,这就可以正常工作。如果还没有一个,我希望能够以编程方式创建一个。这是可能的吗?似乎无法找到一个功能来做到这一点。