关于C#跨线程操作和Pinvoke的一些总结

本文介绍了在C#中使用Pinvoke进行跨线程操作时的学习心得和注意事项,包括P/Invoke的使用,如ref关键字、StructureToPtr方法,以及线程同步的lock语句和volatile关键字。还探讨了线程退出的最佳实践,以及在后台线程触发UI事件时如何避免程序挂起的问题,提出利用SynchronizationContext进行异步通信的解决方案。
摘要由CSDN通过智能技术生成

最近由于需求,买了一个Xtion Live Pro,因此必须使用OpenNI进行体感开发了。很久没关注了,现在才发现OpenNI已经更新到了2.1beta,接口有非常大的调整,因此过去的很多C#Wrapper都不能用了,而且目前网上还没有针对新版本的Wrapper。用C++开发虽然灵活强大,但还是希望借助WPF或WinForm的优势进行软件开发,因此打算自己实现一个Wrapper,同时希望这个Wrapper的接口和Kinect SDK的接口尽可能相似,能用于任何.Net项目。

这里记录一下实现过程中学到的和需要注意的东西。


一、P/Invoke:

在C#与C/C++编写的Dll进行互操作时,Pinvoke是避免不了的。在调用C/C++函数时,一些参数是指针,在C#当中可以使用以下一些方法:

1、使用ref关键字:

[DllImport("OpenNI2.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern OniStatus oniDeviceGetInfo(IntPtr device, ref OniDeviceInfo pInfo);
如上面的pInfo参数,需要一个指向OniDeviceInfo结构的指针,ref关键字的作用是传递引用,本质上就是指针。

使用时,在传递的参数前加上ref即可,如下:


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值