c# wpf是啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# wpf是啥相关的知识,希望对你有一定的参考价值。

LightningChart 快速、先进的2D和3D图表,支持WPF和WinForms平台。
C#:基于微软.NET平台的程序设计语言,具备C的语法结构。
wpf:Windows平台下开发桌面应该程序的工具,也可以理解为一个框架,Visual Studio 2010里就有
参考技术A WPF(Windows Presentation Foundation)是微软推出的基于Windows Vista的用户界面框架,属于.NET Framework 3.0的一部分。它提供了统一的编程模型、语言和框架,真正做到了分离界面设计人员与开发人员的工作;同时它提供了全新的多媒体交互用户图形界面。
对于企业,WPF实现了改进的客户关系和不同的应用程序。通过提供能够快速提供更好的视觉效果、独特的用户体验的技术,来建立与客户的密切关系,使企业可以建立稳定的数字
客户关系和独特的品牌化机会。而且,由于 Windows Presentation Foundation 是窗体、文档、视频、三维以及其他功能的综合,因此企业可以创建持久的用户体验解决方案,并集成到客户的日常活动中。
WPF对于开发人员和设计人员,Windows Presentation Foundation 提供了统一的 UI
平台,因此他们只需学习一个模式,就可以获得无限可能的 UI 体验。对于 .NET
开发人员,其框架是熟悉的,并且它最终将减少提供最佳用户体验和通信逻辑所需的代码行数。对于设计人员,Windows Presentation
Foundation 提供的平台可消除内容、媒体和应用程序之间的边界。最重要的是,Windows Presentation Foundation
可以使开发人员和设计人员同步紧密地合作来快速提供不同的连通体验本回答被提问者和网友采纳

原生 C/C++ 和 C# (.NET) 之间最轻量的 IPC 解决方案是啥?

【中文标题】原生 C/C++ 和 C# (.NET) 之间最轻量的 IPC 解决方案是啥?【英文标题】:What is the lightest IPC solution between native C/C++ and C# (.NET)?原生 C/C++ 和 C# (.NET) 之间最轻量的 IPC 解决方案是什么? 【发布时间】:2013-01-15 21:33:02 【问题描述】:

我有一个本机 C++ Visual Studio 2010 解决方案,我想将数据发送到 .NET 应用程序 (C# WPF) 有没有什么方法可以用几行 C/C++ 代码来做到这一点?我不想在 C/C++ 端使用外部依赖项。有没有关于这个的示例代码?

更多信息: C/C++ 本机应用程序实际上是一个加载到 chrome.exe 进程中的 npapi dll。我不认为这很重要,请确认。

【问题讨论】:

I do not want to use external dependencies on C/C++ side -- 这似乎不可能;它是一个 .NET 应用程序,因此您将依赖 .NET,除非您计划使用 SendKeys 或 Windows 消息与该应用程序通信。 这些数据是什么样的?一个简单的字符串消息? 【参考方案1】:

听起来您可以使用named pipes 在进程之间进行通信。

This question 应该有助于为您指明正确的方向。

【讨论】:

【参考方案2】:

我推荐命名管道; here 是 C# 和 C++ 之间命名管道实现的一个很好的例子。你也可以实现COM Interop。另一种选择是使用 WM_COPYDATA 消息(要捕获它们,您需要覆盖 WndProc),但是非常受限:

public static class CopyDataHelper

    [StructLayout(LayoutKind.Sequential, Pack=1)]
    public struct COPYDATASTRUCT
    
        private Int32 _dwData;
        private Int32 _cbData;
        private IntPtr _lpData;

        public Int32 DataId
        
            get  return _dwData; 
            set  _dwData = value; 
        

        public Int32 DataSize
        
            get  return _cbData; 
        

        public IntPtr Data
        
            get  return _lpData; 
        

        public T GetData<T>() where T : struct
        
            return (T)Marshal.PtrToStructure(_lpData, typeof(T));
        

        public void SetData<T>(T data) where T : struct
        
            Int32 size = Marshal.SizeOf(typeof(T));
            IntPtr ptr = Marshal.AllocHGlobal(size);
            Marshal.StructureToPtr(data, ptr, true);

            _cbData = size;
            _lpData = ptr;
        
    

    [DllImport("User32.dll", CharSet=CharSet.Unicode, ExactSpelling=true, SetLastError=true)]
    [return:  MarshalAs(UnmanagedType.Bool)]
    internal static extern Boolean SendMessage([In] IntPtr hWnd, [In] UInt32 msg, [In] IntPtr wParam, [In, Out] ref COPYDATASTRUCT lParam);

    public const Int32 WM_COPYDATA = 0x004A;

    public static Boolean Send<T>(IntPtr fromHwnd, IntPtr toHwnd, Int32 dataId, T data) where T : struct
    
        IntPtr ptr = IntPtr.Zero;

        try
        
            COPYDATASTRUCT cds = new COPYDATASTRUCT();
            cds.DataId = dataId;
            cds.SetData(data);
            return SendMessage(toHwnd, WM_COPYDATA, fromHwnd, ref cds);
        
        finally
        
            if (ptr != IntPtr.Zero)
                Marshal.FreeHGlobal(ptr);
        
    

    public static COPYDATASTRUCT Receive(Message msg)
    
        if (msg.Msg != WM_COPYDATA)
            throw new ArgumentException("This is not a WM_COPYDATA message!");

        return (COPYDATASTRUCT)msg.GetLParam(typeof(COPYDATASTRUCT));
       


// Override

protected override void WndProc(ref Message msg)

    if (msg.Msg == CopyDataHelper.WM_COPYDATA)
    
        CopyDataHelper.COPYDATASTRUCT cds = CopyDataHelper.Receive(msg);

        if (cds.DataId == myDataId)
        
            MyData data = cds.GetData<MyData>();
            msg.Result = DoSomething(data);
            return;
        
    

    base.WndProc(ref msg);

最后的机会是使用 Google 的 Protocol Buffers:最初的实现只支持 C++、Java 和 Python……但对于 .NET,有 protobuf-net。

【讨论】:

以上是关于c# wpf是啥的主要内容,如果未能解决你的问题,请参考以下文章

wpf是啥

WPF 在WPF中使用SVG文件作为图标的正确方法是啥

WPF 的棱镜是啥?

WPF 的最佳 UI 组件集是啥? [关闭]

c# wpf和winform有啥区别吗?wpf能使用串口吗

wpf使用C#控件