问题列表 - 第9189页

内部控件上的"跨线程操作无效"异常

我一直在努力解决这个问题:我有一个功能,旨在将控件添加到具有跨线程处理的面板,问题是尽管面板和控件在"InvokeRequired = false" - 我得到一个异常告诉我其中一个控件内部控件是从其创建的线程以外的线程访问的,该代码段如下所示:

public delegate void AddControlToPanelDlgt(Panel panel, Control ctrl);
    public void AddControlToPanel(Panel panel, Control ctrl)
    {
        if (panel.InvokeRequired)
        {
            panel.Invoke(new AddControlToPanelDlgt(AddControlToPanel),panel,ctrl);
            return;
        }
        if (ctrl.InvokeRequired)
        {
            ctrl.Invoke(new AddControlToPanelDlgt(AddControlToPanel),panel,ctrl);
            return;
        }
        panel.Controls.Add(ctrl); //<-- here is where the exception is raised
    }
Run Code Online (Sandbox Code Playgroud)

异常消息如下:

"跨线程操作无效:控制'pnlFoo'从其创建的线程以外的线程访问"

('pnlFoo'在ctrl.Controls下)

如何将ctrl添加到面板?!


当代码到达"panel.Controls.Add(ctrl);"时 line - panel和ctrl"InvokeRequired"属性设置为false,问题是ctrl中的控件将"InvokeRequired"设置为true.澄清事情:在基本线程上创建"panel",在新线程上创建"ctrl",因此,必须调用"panel"(导致"ctrl"再次需要调用).一旦完成两个调用,它就会到达panel.Controls.Add(ctrl)命令("panel"和"ctrl"都不需要在这种状态下调用)

这是完整程序的一小部分:

public class ucFoo : UserControl
{
    private Panel pnlFoo = new Panel();

    public ucFoo()
    {
        this.Controls.Add(pnlFoo);
    }
}

public class ucFoo2 : UserControl
{
    private Panel pnlFooContainer = …
Run Code Online (Sandbox Code Playgroud)

c# multithreading winforms

7
推荐指数
1
解决办法
4224
查看次数

Flex使用没有参数的回调函数添加事件侦听器

fileReference.addEventListener(Event.COMPLETE, uploadCompleteHandler);

  private function uploadCompleteHandler(event:Event):void {}
Run Code Online (Sandbox Code Playgroud)

以上是在Actionscript中添加事件侦听器的一种方法.默认情况下,回调函数需要具有名称为event的参数并且类型为Event.有没有办法声明这个函数没有任何参数:

  private function uploadCompleteHandler():void {}
Run Code Online (Sandbox Code Playgroud)

编辑:可以在mxml中添加没有任何参数的事件处理程序.所以一个学生想知道,为什么不能在动作中做同样的事情呢?

apache-flex event-handling actionscript-3

0
推荐指数
1
解决办法
6902
查看次数

从命令行运行带有变量的php脚本

我想从命令行运行PHP脚本,但我也想为该脚本设置一个变量.

浏览器版本: script.php?var=3

命令行:( php -f script.php 但是如何给它包含3的变量?)

php command-line

21
推荐指数
3
解决办法
3万
查看次数

用jquery添加html

是否有一个简洁的方法来添加jQuery而不是

$("#elm").html($("#elm").html() + "some text");
Run Code Online (Sandbox Code Playgroud)

只做$("#elm").html(+= "some text")或类似的事情真是太好了......

jquery

2
推荐指数
1
解决办法
122
查看次数

"是什么让一个好的BizTalk项目"

"什么才是一个好的BizTalk项目"是我最近被客户的IT负责人问到的一个问题.这是相当开放的结果,所以稍微改写一下:

"对于BizTalk 2006和以后的项目,你有哪些十大最佳实践 - 不仅限于技术实践,例如组织"

biztalk

1
推荐指数
1
解决办法
833
查看次数

2
推荐指数
2
解决办法
1万
查看次数

AS 3中是否有装饰器/宏/注释?

我正在寻找相似的Python装饰器/ Lisp宏/ Java注释(是的,我知道这些不一定等同于它们)在Actionscript中.提供类似功能的工具也很棒(我在Linux上使用Eclipse的Flex Builder插件).

我正在编写Flex应用程序,这就是我想要完成的任务:

我在不同的类中封装了各种远程功能集(有时称为"消息传递网关"或"远程代理"),其中每个方法都镜像服务器上的方法,如下所示:

class UserManagementService extends MyHttpService {
  //...
  private final _urlBase:String = "http://example.com/services/users"
  //...

  public function usrGet(ix:int):User
  {
     url = urlBase + "/get";
     mp:Dictionary = new Dictionary();
     mp["ix"] = ix;
     result:User = this._service.varSend(url, this.sEncodeParams(mp), Class("User"));
     return result;
  }
  //...
}
Run Code Online (Sandbox Code Playgroud)

因为我已经在函数声明中有了远程函数的参数和返回类型,所以只需添加URL后缀就好了,就像这样(Python启发的伪代码):

@remotify("/get")
public function usrGet(ix:int):User { }
Run Code Online (Sandbox Code Playgroud)

现在,这不是很整洁吗?;-)

apache-flex actionscript code-generation

0
推荐指数
1
解决办法
143
查看次数

游戏编程为业余爱好,我应该使用Java还是C++

目前,我正在从Java的艺术与科学一书中学习Java,并遵循Standford的编程方法课程.

我想做游戏编程,但只是作为一种爱好.

我在想,Java是一个不错的选择还是C++游戏编程中的事实.

c++ java

4
推荐指数
2
解决办法
1万
查看次数

如何编写自己的Configformat

我为应用程序开发了一个自己的配置文件文件格式(明文和基于行 - > EOL =一种配置).这种格式没有什么特别的,我这样做的唯一原因就是学习一些东西!读写器函数将在C中实现(使用GLib,因为它应该是UTF8编码的文件).

所以现在,我正在考虑在C代码中实现这种格式的方式.我必须采取哪些步骤才能获得尽可能好的错误消息.我听说过有关Lexer,Parser的一些信息......但是从来没有太深入过.我对它们只是一个非常抽象的概念.那么我需要采取哪些步骤来获得一个用C语言编写的干净的读取器格式,这对于将来的更改也是可维护的?学习/思考的主题是什么?

是的,我知道:C是痛苦的,这个提议有很多不同的"性感"格式,等等.我想学点东西!

干杯,格雷戈尔


附加信息

  • 读取器/写入器/解析器(或其所谓的)应尽可能少地依赖于第三方程序/组件.围绕这个配置部分的应用程序已经使用了GLib,因此它的glib也用于UTF8

c parsing configuration-files

1
推荐指数
1
解决办法
1039
查看次数

捕获变量实例化问题

我目前正在思考一些我无法做对的想法.

问题是我想使用一个lambda函数来实例化捕获的变量,并使用另一个lambda来访问该变量的属性.

由于实例化发生在lambda中,变量实际上并没有在我想要在第二个lambda中使用它时实例化.这是一种鸡和蛋的问题.

我知道变量在第二个lambda中使用时实例化,但编译器却没有.

我的想法有什么办法可行吗?这是实际的代码:

class Program
{
    static void Main(string[] args)
    {
        SqlCommand cmd;

        using (new DisposableComposite(
            () => cmd = new SqlCommand(),
            () => cmd.Connection)) // <- compiler error - variable not instantiated
        {
            // code
        }
    }
}

class DisposableComposite : IDisposable
{
    private List<IDisposable> _disposables = new List<IDisposable>();

    public DisposableComposite(params Func<IDisposable>[] disposableFuncs)
    {
        // ensure the code is actually executed
        foreach (var func in disposableFuncs)
        {
            IDisposable obj = func.Invoke();
            _disposables.Add(obj);
        } …
Run Code Online (Sandbox Code Playgroud)

c# lambda captured-variable

1
推荐指数
1
解决办法
374
查看次数