从Invoke内部关闭表单,如下所示:
Invoke(new Action(() => {
Close();
MessageBox.Show("closed in invoke from another thread");
new Form1();
}));
窗体关闭后立即抛出异常:
在创建窗口句柄之前,无法在控件上调用调用或BeginInvoke。
但仅限于4.0。在Net4.5上,不会引发任何异常。
这是预期的行为吗?我该怎么做呢?
我试图在一些后台线程中使用一堆浏览器。当我使用在设计视图中放置在表单上的webbrowser控件时,但在运行时创建这些控件时,这是没有问题的。
我在全局声明the浏览器数组:
Dim webbroswers(-1) As WebBrowser
以下代码位于主线程上:
ReDim Preserve webbroswers(somenum)
For i = 0 To sumnum
webbroswers(currentbrowsermax + i) = New WebBrowser
Next
然后在后台线程上运行此代码:
If webbroswers(num)
我对线程有个问题,我已经找了几天了,但还是无法解决。
由于某些原因,我定制了一个进度表单,并在线程中使用它。
我试图在进度表单中编写所有函数,以便它们被调用和委托所包装。不幸的是,这段代码不能正常工作,因为当我期望this.InvokeRequired返回true时,它正在返回false。
问题是,当我执行程序时,有时它会抛出一个异常:跨线程操作无效:从创建线程以外的线程访问“FormProgress”。
这是进度表的代码。我已经用调用和委托包装了所有函数。
public partial class FormProgress : Form
{
public FormProgress()
我们从一个尚未被释放的表单上调用Invoke得到一个Invoke。下面是一些演示问题的示例代码:
public partial class Form2 : Form
{
void Form2_Load(object sender, EventArgs e)
{
// Start a task that does an Invoke on this control
Task.Factory.StartNew(TaskWork);
// Sleep here long enough to allow the task that d
在一个.NET应用上工作时,我遇到了一个“跨线程操作无效”的异常,只是它似乎发生在正确的线程中。有没有办法找出哪个线程是创建了特定控件的线程?
到目前为止,我发现的是:
'InvokeRequired‘操作仅告知当前线程是否为“所有者线程”...在Control.Invoke(...)方法上使用Reflector时,我发现了user32.dll中的一个P/Invoke方法,它从一个窗口句柄获取线程Id:
[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
public static ex
C# windows forms VS 2013操作系统:Win7
我遇到了一个有趣的问题,invokeRequired为真,但当我调用beginInvoke()时,它永远不会执行,窗口也永远不会关闭。
但是,当我完全删除beingInvoke()时,窗口关闭正常。
public void CloseMyForm()
{
//if I remove this if block altogether including beingInvoke() the window closes ok
if ( !this.IsDisposed
我收到一个错误的"Cross-thread operation not valid: Control 'AllOtherStatus' accessed from a thread other than the thread it was created on."
我有以下代码:_output设置为AllOtherStatus,查看调试器,_output.InvokeRequired为false
这段代码一直运行良好,直到我更改了一个不相关的类,这个类不使用这段代码。代码转到else语句,然后抛出异常。
private void Thread(Object p)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace OcppDummyClient
{
public partial class Form1 : Form
{
publi
我有以下代码,我见过它以两种不同的方式编写。我只是好奇这两种方法中哪一种更好:
if (this.IsDisposed) return;
if (this.IsHandleCreated)
{
if (this.InvokeRequired)
{
this.Invoke(action);
}
else
{
action();
}
}
log.Error("Control handle was not created, therefore associated action was not execute