草庐IT

c# - 如何在多个线程之间进行通信?

我正在为另一个程序编写一个插件,该程序使用native程序打开一系列文件以从中提取一些数据。我遇到的一个问题是这个过程需要很长时间,我想防止用户界面挂起。另外,我还想让用户能够在流程完成之前取消该流程。过去,我曾为此类事情使用过后台工作程序,但在这种情况下,我认为BackgroundWorker不会起作用。要通过我正在使用的API创建插件,可以通过从IAPICommand接口(interface)继承来创建自定义命令。该接口(interface)包括一个Execute(Applicationapp)方法。然后实例化该类,当用户在程序中调用自定义命令时,程序将调用Execute()方法。

c# - 从其他线程调用主线程中的方法

我正在尝试在C#应用程序中同时运行3个级别的计时器例如:T1将在应用程序的开头运行,然后在其Tick事件上,T2将启动然后在T2的tick事件上,T3将启动。最后,在T3的tick事件上,应该在应用程序的主线程中做一些事情我的问题似乎是主线程中的代码在被其他线程调用时不工作如何让主线程通过其他线程的调用来运行它的功能? 最佳答案 问题很可能是您的主线程需要调用。如果您要在调试器中运行您的程序,您应该看到跨线程操作异常,但在运行时此异常检查被禁用。如果你的主线程是一个表单,你可以用这个简短的代码来处理它:if(InvokeRequir

c# - 主线程结束时线程不会终止

我有一个奇怪的问题:在我的C#应用程序中,我正在创建另一个线程,如下所示:ThreadprintThread=newThread(printWorker);printThread.Name="LoggerMainThread";printThread.IsBackground=true;printThread.Start();当我的主线程结束时,这个新线程继续工作,尽管它被标记为后台。这可能是什么原因造成的?这个对象持有一个Mutex对象,不确定这可能是原因......有什么想法吗?这是来自printWorker方法的代码:while(loggerIsActive){LogMessag

c# - 从任务回调到主线程

因为我不太了解线程,所以我有一个问题。我想在后台和后台方法中做一些事情,我想在某些情况下切换回主线程,否则在后台工作。我怎样才能实现这个功能?我正在使用从UI类(c#)调用StartSyncThreadasyncvoidStartSyncThread(){awaitDoSyncAsync();}TaskDoSyncAsync(){returnTask.Run(()=>DoSync());}在DoSync方法中,我想切换回主线程,以便我可以更改UI。请给我一个简单的解决方案来做到这一点。提前致谢! 最佳答案 首先启动您的异步进程,然后

c# - 从线程向主线程发送异常?

我想将当前线程(该线程不是主线程)的异常传递给主线程。为什么?因为我在另一个线程中检查我的硬锁(该线程使用计时器进行检查),当HardLock不可访问或无效时,我创建了一个由我自己定义的异常,然后抛出该异常。所以那个异常(exception)不能很好地工作。;( 最佳答案 最好的办法是将Thread替换为Task(.NET4.0中的新功能)。Task类处理将异常正确编码到任何检查任务结果的线程。如果无法使用.NET4.0,则Rxextensions中的CoreEx.dll包含一个Exception.PrepareForRethrow

c# - System.Drawing.dll 中出现类型为 'System.ApplicationException' 的未处理异常

我有一个winforms应用程序。在开发模式下,当从VisualStudio.NET2003进行调试时(是的,我知道它很旧,但这是一个遗留项目),当我尝试打开一个新窗体时出现此错误。为了打开一个新表单,我获取了该表单的一个实例,然后我调用了ShowDialog()方法,例如:frmTesttest=newfrmTest(heremyparameters);test.ShowDialog();如果我在调试时按F11(进入)它不会崩溃,但如果在我实例化表单的行中我按F10进入下一行,即test.ShowDialog(),那么它会崩溃显示这个错误。完整的报错是:"Anunhandledexc

javascript - Web Worker `importScripts`方法能否访问主线程缓存的脚本?

实际上有多个问题:importScripts是否始终使用GET请求加载脚本,还是可以缓存脚本?importScripts能否访问缓存在主线程或浏览器上下文中的脚本?worker可以缓存脚本供主线程访问吗?(正好相反) 最佳答案 如果您正确指定诸如“Expires”或“Cache-control”之类的http缓存header,importScripts将不会再次加载脚本,请参阅googlerecomendations关于那个线程之间有一种“网关过滤器”,允许bool值、字符串等原语通过,但不允许对象/函数通过。如果您通过XHR在主线

javascript - Web Worker 被 Chrome 中的主线程阻塞

我有一个WebWorker.我希望用它进行定期网络请求。我特别想要的一件事是即使主JS执行线程被阻塞(例如被window.alert)也发出这些请求。我使用的是Chrome38。但是,当我尝试在worker中发出网络请求时,这些请求似乎被UI线程阻止了。这是一个人为的例子来说明这个问题:基础.js:varworker=newWorker("/worker.js");setTimeout(function(){console.log("beginblocking");varstartDt=newDate();varblockPeriod=5000;vara;//Obviouslywe'd

php - 将参数从主线程传递到新线程

在PHP中,如何使用扩展pthreads将参数从主线程传递到新线程?类似于此的内容HowcanIpassaparametertoaJavaThread?仅在PHP中。 最佳答案 从这段代码开始:http://www.php.net/manual/en/thread.start.phpdata="something";//PasssomethingtotheThreadbeforeyouactuallystartit.var_dump($my->start());?> 关于php-将参数从

java - 从Java中的Runnable线程调用主线程

我已经实现了一个Runnable接口(interface)来加载图像图block,我想从这个辅助线程调用主线程来显示图block。谁能告诉我如何从Java中的可运行接口(interface)线程调用主线程。谢谢。 最佳答案 而不是Runnable你可以使用Callable>它返回一组加载的图像。将这个可调用任务提交给执行者,得到Future>并等待加载线程完成其工作。例如:Future>future=Executors.newSingleThreadExecutor().submit(newCallable>(){@Override