小编Gic*_*ico的帖子

从另一个线程添加表单上的控件

我试图推迟向我的主表单添加控件,目标是加快它的开始时间.好吧,我运行以下异常:

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

我试图在一个较小的例子上简单地解决问题,但问题仍然存在.这是我的代码:

using System;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;

namespace AddConrolFromAnotherThread {
    public partial class Form1 : Form {

        public Form1() {
            InitializeComponent();
        }


        private void AddButton() { 
            if(this.InvokeRequired){
                this.Invoke(new MethodInvoker(this.AddButton));
            }
            Random random = new Random(2);
            Thread.Sleep(20);
            Button button = new Button();
            button.Size = new Size(50,50);
            button.Location = 
                new Point(random.Next(this.Width),random.Next(this.Height));
                this.Controls.Add(button);
        }

        private void buttonStart_Click(object sender, EventArgs e) {
            Thread addControlThread = 
                new Thread(new ThreadStart(this.AddButton));
            addControlThread.Start();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我确实使用了Invoke方法并检查了InvokeRequiered是否为true,但InvokeRequiered保持"true".我真的不明白.至少我会期望StackOverflow异常,因为这是一个递归调用.

所以,如果有人遇到类似问题,请告诉我,我做错了什么?

c# multithreading invoke

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

Json 过滤同级节点上的数据

我是 JSONPath 的新手,任何帮助表示赞赏。我正在尝试根据其同级值过滤数据。

我的 JSON 示例:

[

  {
  "id": "10300",
  "name": "NAME1"
  },
  {
  "id": "10500",
  "name": "NAME2"
  }
 ]
Run Code Online (Sandbox Code Playgroud)

我想通过名称查询 id。我试过这样的事情,但没有运气:

$..id[?(@name=='NAME1')]
Run Code Online (Sandbox Code Playgroud)

我确定我错过了一些微不足道的东西。

json jsonpath

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

PL/SQL中的SQL注入 - 神话还是事实?

我试图破解我的PL/SQL代码.我们创建了打开并获取游标的PL/SQL过程.根据我们的标准,我们创建了一个动态SQL语句,但我们无法注入OR 1 = 1条件.

我做了一个http://sqlfiddle.com/#!4/a62a3/5演示,你可以尝试注入代码.

CREATE FUNCTION get_documents (p_document_id IN DOCUMENTS.DOCUMENT_ID%TYPE)
    RETURN SYS_REFCURSOR
AS
    p_rs SYS_REFCURSOR;
BEGIN
    DBMS_OUTPUT.PUT_LINE('------ INPUT VALUES ------');
    DBMS_OUTPUT.PUT_LINE('p_document_id: ' || p_document_id);

    OPEN p_rs FOR 
        SELECT DOCUMENT_ID, '(' || MY_FIELD || ')' FROM DOCUMENTS WHERE DOCUMENT_ID = '' ||  p_document_id  || '';
    RETURN p_rs;
END;
Run Code Online (Sandbox Code Playgroud)

我们尝试在p_document_id参数中注入代码.我们将其设置为:

 document_refcur_local:=get_documents('10'' OR 1=1; -- ');
Run Code Online (Sandbox Code Playgroud)

但我们无法选择所有记录.能不能让我知道我做错了什么?

sql plsql code-injection

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

ping 224.0.0.1 没有回复

这些天我在玩多播,遇到了一些我不明白的奇怪事情。

我创建了一个聊天多播客户端,一切似乎都正常。之后,我阅读了一些 linux 文档并发现通过 ping 224.0.0.1 应该从加入某个多播组的所有节点返回我的回复。我在 xp 和 win7 机器上试过。两者的行为是相同的。我的客户似乎只加入我定义的组 (224.0.19.1)。它不加入 224.0.0.1 组。

来自wireshark:[source ip] 224.0.0.22 IGMPv3 54 Membership Report / Join group 224.0.19.1 for any source

这是我设置套接字的方式:

        IPEndPoint ipep = new IPEndPoint(IPAddress.Any, int.Parse(port));

        m_socket.Bind(ipep);

        IPAddress ip = IPAddress.Parse(mcastGroup);

        m_socket.SetSocketOption(
            SocketOptionLevel.IP, SocketOptionName.AddMembership, 
            new MulticastOption(ip, IPAddress.Any));
Run Code Online (Sandbox Code Playgroud)

然后我检查了netsh:

C:\Users\user1>netsh interface ip show joins

Interface 1: Loopback Pseudo-Interface 1

Scope       References  Last  Address
----------  ----------  ----  ---------------------------------
0                    2  Yes   239.255.255.250

Interface 11: LAN

Scope       References  Last  Address
----------  ----------  ----  --------------------------------- …
Run Code Online (Sandbox Code Playgroud)

windows ip networking network-programming multicast

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