jjzjj

c# - delegate.Invoke 是如何工作的?

如果我在我的代码中创建一个委托(delegate),例如:delegatevoiddostuff(stringo);这会生成一个派生自System.MulticastDelegate的类,该类实现了三个方法-Invoke、BeginInvoke和EndInvoke.如果我查看为Invoke编译的IL,我看到的是:.methodpublichidebysignewslotvirtualinstancevoidInvoke(stringo)runtimemanaged{}//endofmethoddostuff::Invoke该方法不包含任何代码。调用它确实有效——委托(delegate)

c# - 什么在调用?

什么是方法调用,control.invoke?编程中一般调用是什么例子:MethodInvokergetValues=newMethodInvoker(delegate(){checkbox1Checked=checkbox1.Checked;textBox6Text=textBox6.Text;textBox7Text=textBox7.Text;textBox3Text=textBox3.Text;textBox1Text=textBox1.Text;textBox4Text=textBox4.Text;richTextBox1Text=richTextBox1.Text;text

c# - 如何制作从 C# "Thread-safe"调用的 C (P/invoke) 代码

我有一些使用单个全局变量的简单C代码。显然这不是线程安全的,所以当我在C#中使用P/invoke从多个线程调用它时,事情就搞砸了。如何为每个线程单独导入此函数,或使其成为线程安全的?我尝试声明变量__declspec(thread),但这导致程序崩溃。我还尝试制作一个C++/CLI类,但它不允许成员函数是__declspec(naked),我需要(我正在使用内联汇编)。我在编写多线程C++代码方面经验不足,因此可能缺少某些内容。下面是一些示例代码:C#[DllImport("MyDll.dll",CallingConvention=CallingConvention.Cdecl)]pu

c# - 等效于 Dispatcher.Invoke 或 Dispatcher.RunAsync 的可移植类库

在.NET、Windows8和WindowsPhone7中,我有类似这样的代码:publicstaticvoidInvokeIfRequired(thisDispatcherdispatcher,Actionaction){if(dispatcher.CheckAccess()){action();}else{dispatcher.Invoke(action);}}我将如何在可移植类库中做一些事情?最好有一个与平台无关的实现。我的想法是使用WP7中不可用但肯定会很快的TPL。//PortableDispatchermustbecreatedontheUIthreadandthenmad

c# - 如何在新线程上打开一个窗口?

我有一个选项窗口和一个根据这些选项和Kinect数据显示颜色的窗口。到目前为止,一切都在一个线程上(据我所知;我还没有进行任何线程化)。现在,我添加了一个选项来打开一个查看器窗口,该窗口需要以尽可能低的延迟进行更新。所有这一切都需要创建一个窗口并显示它:viewer=newSkeletalViewer.MainWindow();viewer.Show();当此事件触发时,颜色窗口停止显示颜色(即在主线程上每秒触发30次的事件停止触发),但查看器显示完美。我希望同时更新查看器和颜色窗口。从阅读其他问题来看,解决方案听起来像是在新线程上创建查看器。不过,我在这方面遇到了很多问题。当我点击按

c# - Dispatcher.Invoke with anonymous delegate 在 Silverlight 中有效但在 WPF 中无效

在Silverlight4中,我有一个自定义服务类,它有一个异步的Completed事件。在Completed事件中,我获取返回的数据并通过如下方式调用填充方法:privatevoidservice_Completed(objectsender,CompletedEventArgsargs){Dispatcher.BeginInvoke(()=>populateInbox(args.Jobs));}privatevoidpopulateInbox(Listjobs){inbox.DataContext=jobs;}BeginInvoke在SL4中工作,但是当我将它移植到WPF时,出现以

c# - 从工作线程调用 UI 线程时出现死锁

当我从工作线程调用UI线程时出现死锁。实际上,工作线程在调用行上被阻塞了:return(ucAvancementTrtFamille)mInterfaceTraitement.Invoke(d,newobject[]{psFamille});奇怪的是UI线程(如果我错了,请纠正我,是主线程)是空闲的。有什么办法可以:看看我实际尝试调用哪个线程?看看所说的线程真正在做什么?我们可以在下图中看到,工作线程(ID3732)阻塞在Invoke行上,MainThread在应用程序的主函数中处于空闲状态。编辑:这是主线程的堆栈:Edit2:实际上,我第二次暂停了程序,这里是堆栈的样子:Edit3:

c# - 调用 ToolStripMenuItem

我正在尝试找出是否有调用ToolStripMenuItem的方法。例如,我在返回结果时调用Web服务(异步)。我根据结果填充下拉项,(在回调方法中)ToolStripMenuItem.DropDownItems.Add(newToolStripItemEx("start"));但是我遇到了异常跨线程操作无效:控件“”从创建它的线程以外的线程访问。没有与工具条项关联的调用函数,还有其他方法可以做到这一点吗?我是否试图以完全错误的方式做到这一点?任何输入都会有所帮助。 最佳答案 您正试图在另一个线程中执行依赖控制主线程的代码,您应该使用

c# - 在 Pipeline.Invoke 抛出后在 C# 中捕获 Powershell 输出

我正在从C#应用程序运行Powershell测试脚本。由于错误的cmdlet导致pipe.Invoke()引发异常,脚本可能会失败。我能够捕获我需要的有关异常的所有信息,但我希望能够显示脚本到那时为止的输出。我没有任何运气,因为在抛出异常时结果似乎为空。有什么我想念的吗?谢谢!m_Runspace=RunspaceFactory.CreateRunspace();m_Runspace.Open();Pipelinepipe=m_Runspace.CreatePipeline();pipe.Commands.AddScript(File.ReadAllText(ScriptFile));

C#如何调用多个参数

我使用下面的代码来访问我的表单上的属性,但今天我想将内容写入ListView,这需要更多参数。publicstringTextValue{set{if(this.Memo.InvokeRequired){this.Invoke((MethodInvoker)delegate{this.Memo.Text+=value+"\n";});}else{this.Memo.Text+=value+"\n";}}}如何添加多个参数以及如何使用它们(value,value)? 最佳答案 (编辑-我想我误解了原来的问题)简单地让它成为一个方法而不