.Net C#執行JavaScript腳本

文章目錄

  • 前言
  • 一、安裝
  • 二、執行 JavaScript 腳本
  • 三、與腳本交互
  • 四、JS 調用 C# 方法
  • 五、多線程使用
  • 總結


前言

????ClearScript 是一個 .NET 平臺下的開源庫,用于在 C# 和其他 .NET 語言中執行腳本代碼。它提供了一種方便和安全的方法來將腳本與應用程序集成,并允許將應用程序暴露給腳本以進行更高級別的自定義和交互。


一、安裝

二、執行 JavaScript 腳本

using var engine = new V8ScriptEngine();
engine.Execute("var a = 10; var b = 20; var c = a + b;");
var result = engine.Script.c;
Console.WriteLine(result); // 輸出 30

三、與腳本交互

????在執行 JavaScript 腳本時,可以將 C# 對象傳遞給腳本,以便腳本可以訪問這些對象。要將對象傳遞給腳本,需要使用 AddHostObject() 方法將對象添加到 JavaScript 引擎中。

/// <summary>
/// Person類需要為Public,V8引擎才能正常訪問
/// </summary>
public class Person
{public string? Name { get; set; }public int Age { get; set; }
}/// <summary>
/// JS與C#交互
/// </summary>
static void InteractionBetweenJsAndCsharp()
{using var engine = new V8ScriptEngine();var person = new Person { Name = "沙漠盡頭的狼", Age = 18 };engine.AddHostObject("person", person);engine.Execute("var c = person.Name + ' 才 ' + person.Age + ' 歲呀?';");var result = engine.Script.c;Console.WriteLine(result); // 沙漠盡頭的狼 才 18 歲呀?
}

四、JS 調用 C# 方法

????除了將 C# 對象傳遞給 JavaScript 外,還可以在 JavaScript 中調用 C# 方法。要在 JavaScript 中調用 C# 方法,需要創建一個包含方法的類,并使用 AddHostObject() 方法將該類添加到 JavaScript 引擎中。

/// <summary>
/// JS調用C#的方法
/// </summary>
static void JsCallCSharpMethod()
{using var engine = new V8ScriptEngine();var calculator = new Calculator();engine.AddHostObject("calculator", calculator);engine.Execute("var result = calculator.Add(15, 20)");var result = engine.Script.result;Console.WriteLine(result); // 35
}public class Calculator
{public int Add(int a, int b){return a + b;}
}

五、多線程使用

????ClearScript 還支持在多個線程中使用 JavaScript 引擎。要在多個線程中使用 JavaScript 引擎,需要創建多個 JavaScript 引擎實例,并使用各自的線程來執行腳本。

using System.Threading.Tasks;
using Microsoft.ClearScript.V8;var engine1 = new V8ScriptEngine();
var engine2 = new V8ScriptEngine();Task.Run(() =>
{engine1.Execute("var a = 'Hello from thread 1!'");
});Task.Run(() =>
{engine2.Execute("var b = 'Hello from thread 2!'");
});

總結

????本文介紹了 ClearScript 的使用方法和特點,包括如何在 C# 中執行 JavaScript 腳本、如何與腳本交互、如何調用 C# 方法、多線程使用等方面的內容。ClearScript 提供了一種方便和安全的方法來將腳本與應用程序集成,并允許將應用程序暴露給腳本以進行更高級別的自定義和交互。通過使用 ClearScript,可以為應用程序添加靈活性和可擴展性,并在應用程序中實現動態腳本執行功能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/44186.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/44186.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/44186.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PHP酒店賓館民宿多商戶版系統小程序源碼

解鎖酒店新境界&#xff01;揭秘多商戶版系統的無限可能&#x1f3e8;? &#x1f680; 開篇&#xff1a;酒店業的新革命&#xff0c;多商戶版系統來襲&#xff01; 你是否夢想過將你的酒店打造成一個集餐飲、娛樂、購物于一體的綜合型休閑空間&#xff1f;現在&#xff0c;這…

【linux】服務器卸載cuda

【linux】服務器卸載cuda 文章目錄 【linux】服務器卸載cuda1、查找已安裝的 CUDA 包&#xff1a;2、卸載 CUDA&#xff1a;3、刪除殘留文件4、更新系統的包索引&#xff1a;5、檢查是否卸載干凈&#xff1a; 1、查找已安裝的 CUDA 包&#xff1a; dpkg -l | grep cuda2、卸載…

【JavaScript】深入理解Promise:從基礎概念到進階用法、手寫promise

&#x1f525; 個人主頁&#xff1a;空白詩 文章目錄 一、引言二、Promise概述1. Promise的定義2. Promise的用途3. Promise的三種狀態4. Promise的構造函數和基礎結構5. Promise的優點6. Promise的實例方法7. Promise的靜態方法 三、Promise的基本用法1. 創建一個Promise2. th…

The First項目報告:引領L2解決方案新紀元的模塊化協議AltLayer

在區塊鏈演進中&#xff0c;可擴展性與定制化成為開發者核心訴求。ZK Rollups與Optimistic Rollups雖顯著提升以太坊等區塊鏈性能&#xff0c;卻面臨訪問性、定制難、中心化風險及流動性分散等挑戰。AltLayer以Rollups-as-a-Service創新模式&#xff0c;賦予開發者直接管理roll…

python class

繼承 看下Python中繼承的語法&#xff1a; class DerivedClassName(BaseClassName):<statement-1>...<statement-N>復制代碼 如果基類定義在另一個模塊中的時候&#xff1a; class DerivedClassName(modname.BaseClassName):

【漏洞復現】飛企互聯-FE企業運營管理平臺——uploadAttachmentServlet——文件上傳

聲明&#xff1a;本文檔或演示材料僅供教育和教學目的使用&#xff0c;任何個人或組織使用本文檔中的信息進行非法活動&#xff0c;均與本文檔的作者或發布者無關。 文章目錄 漏洞描述漏洞復現測試工具 漏洞描述 飛企互聯-FE企業運營管理平臺是一個基于云計算、智能化、大數據…

Linux用戶和用戶組的創建和添加

創建用戶組 在Linux中創建用戶組&#xff0c;您可以使用groupadd命令&#xff0c;后跟用戶組名稱。例如&#xff0c;要創建一個名為newgroup的用戶組&#xff0c;您可以執行以下命令&#xff1a; sudo groupadd newgroup創建用戶 創建用戶&#xff0c;您可以使用useradd命令&am…

平安養老險山西分公司開展2024年“7.8全國保險公眾宣傳日”活動

為深入貫徹新發展理念和中央金融工作會議、中央經濟工作會議精神&#xff0c;推動保險行業形象持續向好&#xff0c;根據中保協《關于印發<2024年“7.8全國保險公眾宣傳日”活動方案>的通知》和山西省保險行業協會《山西保險業2024年“7.8全國保險公眾宣傳日”活動方案》…

在誤裝Windows server2019 后如何利用Windows.old恢復?

&#x1f3c6;本文收錄于《CSDN問答解惑》專欄&#xff0c;主要記錄項目實戰過程中的Bug之前因后果及提供真實有效的解決方案&#xff0c;希望能夠助你一臂之力&#xff0c;幫你早日登頂實現財富自由&#x1f680;&#xff1b;同時&#xff0c;歡迎大家關注&&收藏&…

DevExpress(WinForms WPF)中文教程 - 如何減小文檔文件大小?

DevExpress擁有.NET開發需要的所有平臺控件&#xff0c;包含600多個UI控件、報表平臺、DevExpress Dashboard eXpressApp 框架、適用于 Visual Studio的CodeRush等一系列輔助工具。屢獲大獎的軟件開發平臺DevExpress近期重要版本v24.1已正式發布&#xff0c;該版本擁有眾多新產…

PlugLink 與 AI 大模型:深入 COZE API 鏈接實踐(附源碼)

在這個技術日新月異的時代&#xff0c;AI 不再是遙不可及的概念&#xff0c;而是逐漸成為我們日常生活與工作中不可或缺的一部分。作為技術領域的探路者&#xff0c;我深感榮幸地向大家介紹 PlugLink —— 一個旨在簡化 AI 應用集成并促進跨領域協作的開源平臺&#xff0c;以及…

開源數字人項目Hallo

硬件條件&#xff1a; gpu最低12G 軟件&#xff1a; cuda需支持 Python選擇3.10吧&#xff0c;我的版本3.11 源碼&#xff1a; GitHub - fudan-generative-vision/hallo: Hallo: Hierarchical Audio-Driven Visual Synthesis for Portrait Image Animation models文件&…

閱讀筆記——《Fuzz4All: Universal Fuzzing with Large Language Models》

【參考文獻】Xia C S, Paltenghi M, Le Tian J, et al. Fuzz4all: Universal fuzzing with large language models[C]//Proceedings of the IEEE/ACM 46th International Conference on Software Engineering. 2024: 1-13.【注】本文僅為作者個人學習筆記&#xff0c;如有冒犯&…

android paddingStart paddingLeft 使用區別

在 Android 開發中&#xff0c;paddingStart 和 paddingLeft 都是用來設置視圖的內邊距&#xff0c;但它們有一些重要的區別&#xff0c;尤其是在處理國際化和不同的布局方向&#xff08;LTR 和 RTL&#xff09;時&#xff1a; paddingLeft: 設置視圖內容左側的內邊距。只在從左…

科研繪圖系列:python語言實驗線圖(line Chart)

介紹 兩組數據在不同時間點的差異檢驗結果線圖 導入包 import pandas as pd import seaborn as sns import matplotlib.pyplot as plt from scipy import stats輸入數據 ctr = [2, 2, 3, 3, 4, 5, 5, 6, 4, 8, 6, 6, 9, 11, 12, 12, 15, 16, 20, 25, 27] drug = [2, 3, …

python開發prometheus exporter--用于hadoop-yarn監控

首先寫python的exporter需要知道Prometheus提供4種類型Metrics 分別是&#xff1a;Counter, Gauge, Summary和Histogram * Counter可以增長&#xff0c;并且在程序重啟的時候會被重設為0&#xff0c;常被用于任務個數&#xff0c;總處理時間&#xff0c;錯誤個數等只增不減的指…

查看wsl 版本

要查看Windows Subsystem for Linux (WSL) 的版本&#xff0c;您通常需要查看WSL的版本號以及正在運行的Linux發行版的版本。以下是檢查這兩個版本的方法&#xff1a; 1. 查看WSL的版本&#xff08;WSL 1 或 WSL 2&#xff09; 要檢查您的計算機上是否啟用了WSL 2&#xff0c…

如何錄制屏幕視頻?4款軟件,輕松錄屏

在數字化飛速發展的時代&#xff0c;如何錄制屏幕視頻已經成為我們工作、學習和娛樂中不可省略的一個重要問題。無論是制作教學教程還是錄制游戲視頻等&#xff0c;屏幕視頻錄制都為我們提供了極大的便利。今天&#xff0c;就讓我們一起探索如何錄制屏幕視頻的精彩方式&#xf…

多數據源配置導致注解Transactional失效

多數據源配置時&#xff0c;向事務管理器中注入數據源時可以直接注入DynamicRoutingDataSource而不要注入ItemDataSource類型&#xff0c;否則可能會出現事務失效問題。 其他事務失效問題參考&#xff1a; 注解Transaction踩坑指南 注解Transaction失效場景

Windows環境+C#實現顯示接口測試

代碼如下&#xff1a; using Models; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.Design; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; …