首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何解决C#异常:必须先将当前线程设置为单线程单元(STA)模式,然后才能进行OLE调用,请确保你Main函数已在其上标记了STAThreadAttribute

(STA)模式, 然后才能进行OLE调用。...异常示例 在我们项目中, 我们使用CefSharp库, 该库允许我们使用HTML, CSS和JavaScript创建桌面应用程序。功能之一是可以将C#类暴露给窗口中JavaScript对象。...上下文(CefSharp线程)执行该函数, 则将触发异常, 因为我们正在CefSharp默认Apartment State内部运行代码。...在我们例子中, 使用CefSharp中注册类启动OpenFileDialog方法, 如果在不更改线程单元状态情况下运行代码, 将引发异常。...如果你不控制线程创建(例如CefSharp), 则以下解决方案是最佳解决方案, 你可以创建一个临时线程并在其中运行代码: using System.Threading; string selectedPath

2.1K10

CefSharp中文帮助文档「建议收藏」

要禁用日志记录更改settings.LogSeverity,并更改文件名/路径,请使用settings.LogFile。 调试问题时,首先要检查地方是日志文件,因为包含低级Chromium消息。...版本开始,51.0.0可以提供自己自定义BrowserSubProcess,因为可执行文件现在是基础VC++实现非常简单包装。...在全局上下文(window对象属性)中创建对象。如果调用CefSharp.BindObjectAsync没有任何参数,则所有已注册对象都将被绑定。名称绑定是更具描述性选项。...您可以使用WPF控件作为开始示例,因为使用相同方法(添加调试以查看所需事件顺序)。按键和鼠标的点击/移动通常由多个部件,up/down与许多其它可能组合。...WPF屏幕版本(虚拟)开始没有内置支持,版本开始,73新VirtualKeyboardRequested事件现在会在您应用程序应显示虚拟键盘时提供通知。

11.9K31
您找到你想要的搜索结果了吗?
是的
没有找到

将浏览器嵌入 .NET 应用程序中:DotNetBrowser 还是 CefSharp

不需要在主 UI 线程上执行操作——即使在工作线程中也可以执行操作。 您可以同时初始化和使用具有不同配置多个 Chromium 引擎,这在 CefSharp 中是不可能。...方法通用版本可用于显式指定预期返回类型: 这里主要区别是可以将 JavaScript 对象表示为IJsObject。使用接口,您可以访问和修改 JavaScript 对象属性并调用其方法。...JavaScript调用.NET CefSharp 和 DotNetBrowser 都可以使网页上 JavaScript 可以访问 .NET 对象,但是,CefSharp 存在一些特定限制。...另外,CefSharp 只支持调用注入对象方法。如果需要设置属性,则必须修改类并创建 Get/Set 方法。...System.Drawing 中类型,因为限制[19],因此,提供了自己类型。

28840

将浏览器嵌入 .NET 应用程序中:DotNetBrowser 还是 CefSharp

架构 在 CefSharp 中,Chromium 引擎直接在您 .NET 进程中初始化[4]。初始化和关闭都必须在主应用程序线程(通常是 UI 线程)中执行。在不同线程调用它们通常会导致冻结。...不需要在主 UI 线程上执行操作——即使在工作线程中也可以执行操作。 您可以同时初始化和使用具有不同配置多个 Chromium 引擎,这在 CefSharp 中是不可能。...使用接口,您可以访问和修改 JavaScript 对象属性并调用其方法。在 .NET 端对 IJsObject 所做所有更改都将立即反映在 JavaScript 端。...JavaScript调用.NET CefSharp 和 DotNetBrowser 都可以使网页上 JavaScript 可以访问 .NET 对象,但是,CefSharp 存在一些特定限制。...DotNetBrowser DLL 不使用 System.Drawing 中类型,因为限制[18],因此,提供了自己类型。

38120

使用CefSharp开发一个12306“安心刷票弹窗通知”工具

之前抢票工具是基于IEBrowser控件做,不用说大家都知道这个控件在不同Windows系统上表现各异,因为主要依赖于IE内核,坑爹是它有时候还没有直接使用IE效果好,所以使用我这个抢票工具总有不顺收地方...JS无法调用VB.NET写方法,而去可以在X64模式下调用C#方法。....NET对象方法 MyNotify() 了。...-- 应用程序设计使用所有 Windows 版本列表。 Windows 将会自动选择最兼容环境。--> <!...”异常 推测是CefSharp控件这些事件可能不一定运行在UI线程,在非UI线程启动定时器那么定时器“定时事件”也不在UI线程了,所以报错。

3.1K100

.NET周刊【1月第3期 2024-01-24】

NuGet.Server 3.0.0开始,推送包URL为http:///nuget。...文章首先定义了进程对象字段和数据类型,然后通过位域技术减小数据包大小。通过创建C#类SystemProcess,文章展示了如何将进程信息转换为二进制格式,以便网络传输。...深度解析C#数组对象池ArrayPool底层原理 https://www.cnblogs.com/pengze0902/p/17951360 本文讲述了.NET中池化技术,包括连接池、线程池、对象池...特别强调了ArrayPool作用,通过管理数组重用减少垃圾回收压力和内存碎片,尤其适用于高性能应用和多线程环境。...活动 在午休期间使用 C# 从头开始创建 Blazor WebAssembly Web 应用程序 (2024/02/09 12:00~) https://msdevjp.connpass.com/event

12710

C#开发BIMFACE系列52 CS客户端集成BIMFACE应用技术方案

只支持单线程模式,大部分对其操作必须在创建线程中执行,不可以在其它线程调用其方法或属性。 性能相对较弱。...CefSharp【推荐】   CefSharp是一种将功能齐全符合标准web浏览器嵌入C#或VB.NET应用程序简单方法。...CefSharp拥有WinForms和WPF应用程序浏览器控件,以及自动化项目的OffScreen版本。...CefSharp中文帮助文档,请点击查看 免费、开源:https://github.com/cefsharp/CefSharp 支持JS、C#、WinForm窗体之间相互通讯与调用。...而CEFSharpNuget上下载Runtime耗时较长。 WebView2 Runtime 一次安装,可以所有程序共享,并且还支持独立自动升级,而CEFSharp每个程序都需要下载。

4.6K10

Python中threading模块

如果未通过threading模块创建调用控制 线程,则返回具有有限功能虚拟线程对象。在2.6版中更改:添加了current_thread()拼写。...创建线程对象后,必须通过调用线程start()方法启动其活动。这将run()在单独控制线程调用该方法。一旦线程活动开始线程就被认为是“活着”。...安排run()在单独控制线程调用对象方法。方法将RuntimeError在同一个线程对象上多次调用if。run() 表示线程活动方法。您可以在子类中重写方法。...在不带参数情况下调用:如果线程拥有锁,则将递归级别递增1,并立即返回。否则,如果另一个线程拥有该锁,则阻塞直到锁被解锁。锁解锁后(不属于任何线程),然后获取所有权,将递归级别设置为1,然后返回。...仅在调用线程拥有锁时调用方法。RuntimeError如果在锁定解锁时调用方法,则引发A.没有回报价值。条件对象条件变量总是与某种锁相关联; 这可以传入,或者默认创建一个。

2K20

如何在.NET应用程序中分析CPU使用率过高问题

15.应用程序池列表中选择您应用程序池。 16.点击OK。 17.点击Next。 18.Next再点击一次。 19.如果需要,请输入规则名称,并记下转储保存位置。 您可以根据需要更改位置。...根据.NET C#规范: 使用static[6]修饰符声明一个静态成员,该成员属于类型本身而不是特定对象。...即使没有创建该类实例,该静态成员也可以在该类上调用。始终通过类名称而不是实例名称访问静态成员。无论创建多少个类实例,静态成员只有一个副本。...静态方法和属性无法访问其包含类型非静态字段和事件,并且除非在方法参数中显式传递了实例变量,否则它们无法访问任何对象实例变量。 这意味着静态成员属于类型本身,而不是对象。...鉴于Web环境是多线程环境,因为每个请求都是由w3wp.exe进程产生线程;考虑到静态成员是该过程一部分,我们可能会遇到以下情况:几个不同线程尝试访问静态(由多个线程共享)变量数据,这最终可能会导致多线程问题

2.4K30

最大限度地降低多线程 C# 代码复杂性

另一个角度来说,不一定是关乎可以编码什么,而是关乎可以选择不编码什么,因为你希望通过间断代码行产生一点奇迹。...同步挑战 在多线程编程方面遇到第一个问题是,同步对共享资源访问权限。当两个或多个线程共享对某个对象访问权限且可能同时尝试修改对象时,就会出现这个问题。...,无论有多少线程在执行 Foo 方法,只要执行另一个 Read 或 Write 方法,就不会调用 Write 方法。...除非为每个检索方法都创建一个线程,否则代码运行速度比预期慢得多:99% 所有执行时间可能会花在等待 HTTP 请求返回上。 在一个线程上运行代码效率很低,并且线程创建语法非常容易出错。...随着你支持多个线程及其助理对象,挑战变得更严峻,开发人员不得不在编写代码时使用重复代码。意识到可以创建委托集合和用于包装这些委托类后,便能使用一个方法调用创建所有线程

13830

C# WPF 嵌入网页版WebGL油田三维可视化监控 0x00 楔子0x01 寂静无声0x02 初步尝试0x03 CefSharp现身0x04

毕竟我们主要做JavaScript前端开发,对于C# 之类接触很少。 抱着试一试态度在开发群里面问了下,有人懂WPF开发吗? 寂静无声。。。 因为基本上专业在前端开发,可以理解。...开始以为是因为使用了IE内核原因,后来切换到chrome内核,发现还是不行。 初步尝试 宣告失败。。。...如果你不做C#开发。那么你可以这么理解NuGet: 如果你了解python,那么类似pip。 如果你了解nodejs,那么类似npm。 如果你了解ruby,那么类似gem。...如果你了解java,那么类似maven。 在创建wpf项目的解决方案上面点击右键,可以发现NuGet管理: ?...ChromiumWebBrowser对象,在创建时候,传入我们三维应用地址;之后把该对象加入到Wpf界面中即可。

2.8K30

.NET桌面程序集成Web网页开发十种解决方案

只支持单线程模式,大部分对其操作必须在创建线程中执行,不可以在其它线程调用其方法或属性。 性能相对较弱。...下图是在Winform程序中使用WebView2组件加载我博客园页面的效果 控件4:CefSharp   CefSharp是一种将功能齐全符合标准web浏览器嵌入C#或VB.NET应用程序简单方法...CefSharp拥有WinForms和WPF应用程序浏览器控件,以及自动化项目的OffScreen版本。...CefSharp中文帮助文档,请点击查看 免费、开源:https://github.com/cefsharp/CefSharp 支持JS、C#、WinForm窗体之间相互通讯与调用。...它是用C#写成,里面有大量C#注释,geckofx是最完美的默认iE核心webbrowse控件替代控件。

2.7K11

C#扫描器编写各种问题荟萃

最近在写一款基于C#网站备份文件扫描器,第一次写C#程序,其中遇到各种问题。在这里荟萃一下,给其他朋友一些帮助。     先秀一下效果: ?...问题一、多线程中修改UI抛出异常     一般异常信息是“现场间操作无效”、“调用线程无法访问对象因为另一个线程拥有对象”。...唉,线程找不到对象,就跟我情人节没有对象,在这里写程序一个道理……苦逼。     我们需要使用“委托”方式,委托UI线程来处理操作UI那个函数。...这个时候“增加”这部分代码就需要写在单独一个方法中,然后由工作线程委托UI线程来执行这个方法。    ...在listbox属性中,有一项叫“ContextMenu”,我们添加,即可为listbox增加一个右键菜单。     但如何向菜单中增加项目?

85151

10个最难回答Java面试题

字符串在 Java 中是不可变,这点也是和C#设计类似,因为 String 对象缓存在 String 池中。...简而言之,因为 String 是不可变,所以没有人可以在创建更改其内容,这保证了 String hashCode 在多次调用时是相同。... Java 5 开始,使用 Enum 创建线程安全Singleton很容易。但如果面试官坚持双重检查锁定,那么你必须为他们编写代码。记得使用volatile变量。...图精确演示了我们程序, 其中一个线程在一个对象上持有锁, 并等待其他线程持有的其他对象锁。...调用notify() 或 notifyAll() 方法向单个或多个线程发出一个条件已更改通知,并且一旦通知线程离开 synchronized 块,正在等待所有线程开始获取正在等待对象锁定,幸运线程在重新获取锁之后

78120

CefSharp基于.Net Framework 4.0 框架编译

开始 建立一个名为CefSharp-DotNet4.0解决方案(下文简称sln哈),咱们就开始吧!...(TypeInfo)Type中抽离,所以4.0种Type并没有GetTypeInfo方法 解决办法:4.0访问TypeBaseType、IsGenericType等属性,直接Type对象调用即可...由于使用了程序集统一方式,解决方案中所有工程都必须引用这三个库。 C#发展至今,已经最初1.0到了5.0版本: 1.0版本 - 基本C#语法。...CefSharp.Core CefSharp.Core是一个C库,但是由于该C库里面调用了一些C#代码,所以跟.Net Framework版本出现了相关性。...完成操作后,直接进行Rebuild操作,因为该C++库并不涉及到C#代码,所以只需要做上述增加Bcl库相关操作,编译成功!

24010

c#线程并发-金三银四面试:C#.NET面试题高级篇2-多线程

Mutex是一个基于内核模式互斥锁,支持锁递归调用,而Lock是一个混合锁,一般建议使用Lock更好,因为lock性能更好。   属性:   :获取线程正在其中执行的当前上下文。   ...:获取一个值,该值包含当前线程状态。   方法:   public void Abort()   在调用方法线程上引发 ,以开始终止线程过程。调用方法通常会终止线程。...public static bool Yield()   导致调用线程执行准备好在当前处理器上运行另一个线程。由操作系统选择要执行线程。   ...Task提供了很多方法和属性c#线程并发,通过这些方法和属性能够对Task执行进行控制,并且能够获得其状态信息。Task创建和执行都是独立,因此可以对关联操作执行拥有完全控制权。...因为线程访问,没有使用锁机制c#线程并发,会导致有更新丢失。   9、多线程并行()和并发()区别   类是.NET 4中新增抽象线程类。.

65740

.NET面试题系列 - 多线程同步(1)

另一个线程会将flag1变成1。但是发现flag原始值是1。此时,无法离开while,会不停调用Exchange(开始旋转)直到第一个线程调用Exit。...这是因为在内核对象调用每个方法都会造成调用线程托管代码(例如你代码调用了WaitOne)转换到本地用户模式代码,再转换为本地内核模式代码。然后,还要朝相反方向一路返回。...如果布尔对象开始就是true,则WaitOne阻塞立即解除,然后线程继续运作,AutoResetEvent自动调用Reset将门关闭。...使锁支持递归和自旋 有的锁支持递归调用。如果一个锁可以递归使用,需要维护一个整型变量,其意义为,拥有这个锁线程拥有多少次。...如果一个线程当前拥有一个递归锁,然后它又在这个锁上等待,那么再次持有该锁,整型变量值加一。当释放锁时,整型变量值减一,只有整型变量值为0时,另一个线程才能够获得锁。

1.2K30
领券