Tag: 调用

确保事情在WPF的UI线程上运行

我正在构build一个WPF应用程序。 我正在做一些与服务器端的asynchronous通信,我在客户端使用Prism的事件聚合。 这两件事情都会导致产生新的线程,而不是UI线程。 如果我试图在这些callback和事件处理程序线程上执行“WPF操作”,那么世界将会崩溃,现在它已经开始了。 首先,我遇到了问题,尝试在服务器的callback中创build一些WPF对象。 我被告知该线程需要在STA模式下运行。 现在我试图在Prism事件处理程序中更新一些UI数据,并告诉我: 调用者不能访问此线程,因为不同的线程拥有它。 所以; 什么是在WPF中正确使用的关键? 我已经阅读了这篇MSDN文章中的WPF Dispatcher。 我开始明白了,但我还不是巫师。 当我需要运行一些我不确定的东西时,总是使用Dispatcher.Invoke的关键是在UI线程上调用吗? 如果它实际上是在UI线程上调用,那么它是否重要?我仍然使用Dispatcher.Invoke? Dispatcher.Invoke =同步。 Dispathcher.BeginInvoke =asynchronous? 请问Dispatcher.Invoke请求UI线程,然后停下来等待呢? 这是不好的做法和风险较低的应对scheme? 我怎样才能得到调度员? 请问Dispatcher.CurrentDispatcher总是给我代表UI线程的调度程序? 会不会有一个以上的Dispatcher,或者是“Dispatcher”与应用程序的UI线程基本相同? 和BackgroundWorker有什么关系? 我什么时候用这个呢? 我认为这总是asynchronous? 一切运行在UI线程(通过被调用)运行在STA公寓模式? 也就是说,如果我有需要在STA模式下运行的东西 – Dispatcher.Invoke是否足够? 任何人想为我清理的东西? 任何相关的build议,等等? 谢谢!

我应该在VB / VBA中使用Call关键字吗?

在VB / VBA中调用subs时使用Call关键字。 我知道这是可选的,但使用它还是离开它更好? 我一直认为这是更明确的,但也许只是噪音。 此外,我在另一个论坛上读到:使用Call关键字更快,因为它知道它不会返回任何值,所以不需要设置任何堆栈空间来为返回值腾出空间。

最好的方法来调用任何跨线程代码?

我知道这个问题之前已经被问过了,但是我正在寻找一种方法来: 简化安全交叉线程代码的创build。 在任何情况下重用此代码(无Windows窗体引用)。 这是我到目前为止,但我想删除Windows窗体引用。 有任何想法吗? public delegate void SafeInvokeDelegate(System.Action action); public class SafeInvoke { private readonly System.Windows.Forms.Control _threadControl; public SafeInvoke() { _threadControl = new System.Windows.Forms.Control(); } public void Invoke(System.Action action) { if (_threadControl.InvokeRequired) _threadControl.Invoke(new SafeInvokeDelegate(Invoke), new object[] {action}); else if (action != null) action(); } } 上面的类可以这样使用: SafeInvoke _safeInvoker = new SafeInvoke(); void SafeClearItems() { […]

在VBA中调用另一个模块中的子例程

是否可以从一个Module调用一个function到另一个? 我有以下代码: Sub MAIN() Call IDLE End Sub MAIN位于Module1 IDLE位于Module2 ,定义如下: Sub IDLE()

如何使方法调用C#类中的另一个?

现在我有两个类AllMethods.cs和caller.cs 。 我在类AllMethods.cs有一些方法。 我想在caller.cs中编写一个代码来调用caller.cs中的某个方法。 代码示例: public class allmethods public static void Method1() { // Method1 } public static void Method2() { // Method2 } class caller { public static void Main(string[] args) { // I want to write a code here to call Method2 for example from AllMethods Class } } 我怎样才能做到这一点? 任何帮助? 谢谢。

现代C ++编译器能否避免在某些情况下调用const函数两次?

例如,如果我有这个代码: class SomeDataProcessor { public: bool calc(const SomeData & d1, const SomeData & d2) const; private: //Some non-mutable, non-static member variables } SomeDataProcessor sdp; SomeData data1; SomeData data2; someObscureFunction(sdp.calc(data1, data2), sdp.calc(data1, data2)); 让我们考虑潜在的等价代码: bool b = sdp.calc(data1, data2); someObscureFunction(b,b); 为了使这是有效的, calc()函数应该满足一些要求,对于这个例子,我调用属性_pure_const_formula_ _pure_const_formula_会: 不改变任何成员,静态或全局variables状态 只调用_pure_const_formula_函数 也许还有一些其他的条件,我不记得 例如,调用一个随机数生成器将不符合这些要求。 编译器是否允许用第二个代码replace第一个代码,即使它需要recursion地挖掘到被调用的函数? 现代编译器能做到这一点吗?

如何执行一个方法作为parameter passing给函数

我想在JavaScript中编写自己的函数,它采用callback方法作为参数,并在完成后执行它,我不知道如何调用我的方法中作为parameter passing的方法。 像反思一样。 示例代码 function myfunction(param1, callbackfunction) { //do processing here //how to invoke callbackfunction at this point? } //this is the function call to myfunction myfunction("hello", function(){ //call back method implementation here });

为什么JavaScript中某些函数调用被称为“非法调用”?

例如,如果我这样做: var q = document.querySelectorAll; q('body'); Chrome中出现“非法调用”错误。 我想不出为什么这是必要的。 首先,所有本机代码function都不是这样。 其实我可以这样做: var o = Object; // which is a native code function var x = new o(); 一切正常。 特别是在处理文档和控制台时,我发现了这个问题。 有什么想法吗?

清理遍布InvokeRequired的代码

我知道,从任何非UI线程操纵UI控件时,您必须将您的调用编组到UI线程以避免问题。 一般的共识是你应该使用testingInvokeRequired,如果是true,则使用.Invoke来执行编组。 这导致了很多看起来像这样的代码: private void UpdateSummary(string text) { if (this.InvokeRequired) { this.Invoke(new Action(() => UpdateSummary(text))); } else { summary.Text = text; } } 我的问题是:我可以省略InvokeRequiredtesting,只需调用Invoke,如下所示: private void UpdateSummary(string text) { this.Invoke(new Action(() => summary.Text = text)); } 这样做有问题吗? 如果是这样,有没有更好的方法来保持InvokeRequiredtesting,而不必复制和粘贴这个模式到处?

如何使用reflection(Java)调用私有静态方法?

我想调用一个私有的静态方法。 我有它的名字。 我听说可以使用Javareflection机制来完成。 我该怎么做? 编辑:我试图调用该方法时遇到的一个问题是如何指定其参数的types。 我的方法接收一个参数,其types是Map。 因此,我不能做Map<User, String>.TYPE (在运行时,因为Java Type擦除,没有Map这样的东西)。 有没有另一种方法来获得该方法?