首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用x64 (64位)平台时在.NET C#应用程序(WinForms)中使用C#

如何在使用x64 (64位)平台时在.NET C#应用程序(WinForms)中使用C#
EN

Stack Overflow用户
提问于 2020-08-26 18:46:58
回答 1查看 547关注 0票数 0

我正在创建这个问题,并亲自回答它,以共享一种使用ActiViz in .NET Framework (C#)运行/调试和构建应用程序(Windows )的简单方法。问和回答你自己的问题是可以的

如果我创建一个新的Windows应用程序(.NET框架,C#)并以x64平台为目标:

然后我可以转到Project > Manage NuGet包和搜索/安装Activiz.NET.x64 (v5.8.0)。

但是,安装Activiz.NET.x64后,如果我试图将RenderWindowControl拖动到Form,则会显示以下错误(加载工具箱项“RenderWindowControl”失败):

这个问题有什么解决办法吗?

我知道这里这里(答案未被接受)已经回答了这个问题;但是,这些答案包括使用Activiz.NET.x86 (32位)设计/调试应用程序,以及只为应用程序的发布版本安装Activiz.NET.x64 (64位)。显然,在两个ActiViz包之间来回切换非常麻烦。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-26 18:46:58

Kitware ActiViz网站的常见问题中,如下所示:

ActiViz 64与Visual?一起工作吗? Visual是一个32位应用程序,因此64位控件无法工作,在Visual中使用设计器时需要32位版本的ActiViz。通常,32位版本用于设计,64位版本用于最终编译。

然而,解决这一问题的一个办法是:

  1. 创建新的Windows应用程序(.NET C#),并立即针对x64 (64位)平台;
  2. 通过Project > Manage包安装Activiz.NET.x64 (撰写此答案时版本为5.8.0);
  3. Panel (例如,名为viewportPanel )添加到Form中。这个Panel将是一个RenderWindowControlParent
  4. 在表单的构造函数中创建RenderWindowControl实例,如下所示: 使用Kitware.VTK;使用System.Windows.Forms;命名空间ActiVizTest {公共部分类Form1 : Form { public Form1() { InitializeComponent();RenderWindowControl renderWindowControl =新RenderWindowControl() { Parent = viewportPanel,AddTestActors = true };}}

现在可以在使用Activiz.NET.x64时运行/调试和构建应用程序:

然而,仍然存在一个可能的问题:

让我说我希望背景是红色的。

代码语言:javascript
复制
public Form1()
{
    InitializeComponent();

    RenderWindowControl renderWindowControl = new RenderWindowControl()
    {
        Parent = viewportPanel,
        AddTestActors = true
    };

    renderWindowControl.RenderWindow.GetRenderers().GetFirstRenderer().SetBackground(1, 0, 0);
}

添加上面所示的新代码行将引发System.NullReferenceException。这是因为renWinControl.RenderWindow在初始化Form1之前是null

因此,我们需要在RenderWindow上进行的任何设置都应该在表单的构造函数之后完成,例如,我们可以创建一个Load事件。同时,我们还可以创建一些字段,以便更容易地访问RenderWindowRenderer

完整代码:

代码语言:javascript
复制
using Kitware.VTK;
using System;
using System.Windows.Forms;
namespace ActiVizTest
{
    public partial class Form1 : Form
    {
        private readonly RenderWindowControl renderWindowControl;
        private vtkRenderWindow renderWindow;
        private vtkRenderer renderer;
        public Form1()
        {
            InitializeComponent();

            renderWindowControl = new RenderWindowControl()
            {
                Parent = viewportPanel,
                AddTestActors = true
            };
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            renderWindow = renderWindowControl.RenderWindow;
            renderer = renderWindow.GetRenderers().GetFirstRenderer();

            renderer.SetBackground(1, 0, 0);
        }
    }
}

最后,在x64中进行调试:

编辑

与使用Form_Load事件不同,最好使用RenderWindowControl_Load事件。只需记住,在加载控件之前,RenderWindowControl.RenderWindownull

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63603886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档