Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 可以从BG线程中调用主线程中的方法,在事件调用列表中间执行吗?_C# - Fatal编程技术网

C# 可以从BG线程中调用主线程中的方法,在事件调用列表中间执行吗?

C# 可以从BG线程中调用主线程中的方法,在事件调用列表中间执行吗?,c#,C#,当计划在其他线程中调用的方法在目标线程中执行时,我会受伤吗 例如,当我的主线程从事件调用列表调用函数,并且在事件调用列表方法之间的某个位置执行来自其他线程的我的方法(它不是列表的一部分)时,是否会出现这种情况 更新:所以,如果我想确保某个对象在事件调用期间没有被修改,我需要使用一些Busy属性,即使所有修改都是在单个线程中完成的,因为来自其他线程的方法可以注入到我的线程中,并在事件调用期间修改此对象?我假设您的意思是在调度程序上有一个要执行的操作队列,然后通过BeginInvoke尝试从另一个线

当计划在其他线程中调用的方法在目标线程中执行时,我会受伤吗

例如,当我的主线程从事件调用列表调用函数,并且在事件调用列表方法之间的某个位置执行来自其他线程的我的方法(它不是列表的一部分)时,是否会出现这种情况


更新:所以,如果我想确保某个对象在事件调用期间没有被修改,我需要使用一些Busy属性,即使所有修改都是在单个线程中完成的,因为来自其他线程的方法可以注入到我的线程中,并在事件调用期间修改此对象?

我假设您的意思是在调度程序上有一个要执行的操作队列,然后通过
BeginInvoke
尝试从另一个线程执行其他操作。根据MSDN,在这种情况下,操作被添加到调度程序队列中,这暗示它实际上是在先前挂起的操作完成后执行的


话虽如此,请注意,
BeginInvoke
有一个用于指定优先级的重载,因此可能会出现这样的情况,即排队较晚但优先级较高的操作比在其之前排队的优先级较低的操作更早执行。

我想您的意思是要在调度程序上执行一个操作队列,然后通过
BeginInvoke
尝试从另一个线程执行其他内容。根据MSDN,在这种情况下,操作被添加到调度程序队列中,这暗示它实际上是在先前挂起的操作完成后执行的

话虽如此,请注意,
BeginInvoke
有一个重载用于指定优先级,因此,可能会出现这样的情况,即排队较晚但优先级较高的操作比在其之前排队的优先级较低的操作更早执行