代码之家  ›  专栏  ›  技术社区  ›  bohdan_trotsenko

我可以使用F*II交互式脚本或交互调试/测试我的C?GUI项目吗?

  •  4
  • bohdan_trotsenko  · 技术社区  · 16 年前

    我看过f和directx的演示。

    用户选择F代码的一部分并将其发送到F Interactive。 在这两者之间,表单的线程正在工作:表单显示动态内容并响应单击。

    我能得出结论吗? 对于现有的C Winforms项目 我可以创建一个引用它的f*项目 然后在F Interactive中启动F项目 运行窗体的任意方法 ?

    编辑 :调用的步骤是什么 btShowNextNumber_Click 在运行的应用程序中?

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    
        int i = 0;
    
        private void btShowNextNumber_Click(object sender, EventArgs e)
        {
            ++i;
            label1.Text = i.ToString();
        }
    }
    
    5 回复  |  直到 15 年前
        1
  •  7
  •   kvb    16 年前

    当然。在F Interactive中,您将运行类似于:

    #r "MyDllName.dll"
    open MyNamespace
    
    // Call the constructor to get a new form, then show it
    let form = Form1()
    form.Show()
    
    // Call whatever public method you want
    form.MyMethodThatIWantToUse()    
    
        2
  •  5
  •   nietras    15 年前

    您还可以添加:

    Debugger.Launch()
    

    到剧本里去。这将弹出一个对话框,询问要使用哪个调试器。例如,可以使用与执行脚本所用的VisualStudio实例相同的VisualStudio实例。

        3
  •  2
  •   Overdose    16 年前
        4
  •  2
  •   elder_george    16 年前

    f只是c或vb这样的clr语言。这意味着它可以引用CLR程序集(DLL和EXE),从中导入公共类,并调用公共方法和属性。如果类、方法或属性不是公开的,则仍然可以使用反射来访问它们,但是很少有需要真正执行的实例。

    请注意,要使winform ui元素响应用户操作,您需要运行windows消息循环(使用 Application.Run )在f shell的情况下,它们似乎是在后台线程中运行它,并使用control.invoke或其等价物向该线程发送操作( WindowsFormsSynchronizationContext )

    要调用示例中显示的方法,需要执行以下操作之一:

    1)IF方法 btShowNextNumber_Click 公开:

    form.Invoke(new Action(()=> form.btShowNextNumber_Click(form, EventArgs.Empty)));
    

    SynchronizationContext.Current.Send(o => form.btShowNextNumber_Click(form, EventArgs.Empty));
    

    2)IF方法 btshownextnumber_单击 不是公开的,而是按钮 btShowNextNumber 是:

    form.Invoke(new Action(()=> form.btShowNextNumber.PerformClick());
    

    SynchronizationContext.Current.Send(o => form.btShowNextNumber.PerformClick());
    

    就我所理解的F shell的工作方式而言,它可以设置POST命令。 SynchronizationContext.Send 透明地,就像ironpython shell一样 does . 现在还不能说这是怎么回事。需要检查

        5
  •  1
  •   Sheng Jiang 蒋晟    16 年前

    您需要一个支持托管代码的调试器。使用哪种语言编写代码宿主并不重要。我一直在不同的容器中调试代码,比如微软office、ie、windows资源管理器、visual studio和其他vb/c应用程序。