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)
在一个.NET应用上工作时,我遇到了一个“跨线程操作无效”的异常,只是它似乎发生在正确的线程中。有没有办法找出哪个线程是创建了特定控件的线程?
到目前为止,我发现的是:
'InvokeRequired‘操作仅告知当前线程是否为“所有者线程”...在Control.Invoke(...)方法上使用Reflector时,我发现了user32.dll中的一个P/Invoke方法,它从一个窗口句柄获取线程Id:
[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
public static ex
我对线程有个问题,我已经找了几天了,但还是无法解决。
由于某些原因,我定制了一个进度表单,并在线程中使用它。
我试图在进度表单中编写所有函数,以便它们被调用和委托所包装。不幸的是,这段代码不能正常工作,因为当我期望this.InvokeRequired返回true时,它正在返回false。
问题是,当我执行程序时,有时它会抛出一个异常:跨线程操作无效:从创建线程以外的线程访问“FormProgress”。
这是进度表的代码。我已经用调用和委托包装了所有函数。
public partial class FormProgress : Form
{
public FormProgress()
从Invoke内部关闭表单,如下所示:
Invoke(new Action(() => {
Close();
MessageBox.Show("closed in invoke from another thread");
new Form1();
}));
窗体关闭后立即抛出异常:
在创建窗口句柄之前,无法在控件上调用调用或BeginInvoke。
但仅限于4.0。在Net4.5上,不会引发任何异常。
这是预期的行为吗?我该怎么做呢?
所以我已经创建了一个事件,每当属性ActualVoltage改变时,它就会在Form1中更新,但它不会。当我向机器发送一个set- ActualVoltage命令时,它将发回一个数字,我将该数字赋值给AcutalVoltage。请帮助我,请告诉我我的错误在哪里,并给我解释一下,就像我是一个5岁的孩子一样,kid.Here是我的事件代码:
public delegate void ValueChange();
public event ValueChange Change;
public double ActualVoltage
{
我刚刚发布了一个关于如何让委托更新另一个表单上的文本框的问题。就在我以为我已经找到了使用Invoke...this的答案的时候。这是我的代码:
主表单代码:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.IO;
using System.Data.OleDb;
using System.Collections.Specialized;
usi
当我的线程完成时,我总是会抛出异常。
我可以抓住他们,但我宁愿我的代码先抓住他们。
这段代码可以用于完整的.Net框架,但是IsHandleCreated并不存在于Compact中。
问题:,我应该用什么代替IsHandleCreated__?
Control _parent; // set when custom BackgroundWorker like class is created
bool parentOk {
get {
if (_parent != null) {
if (!_parent.IsDisposed) {
return _p
首先,对不起我的英语,因为它不是我的母语。
由于某些原因,我的.NET Windows窗体应用程序出现了问题,并且仅在Virtaul PC Windows 7 (x64)上复制。
我在我的应用程序的一个地方面对Win32Exception时,调整主应用程序表单的大小,其中包含许多自定义控件,包括两个互相堆叠的表控件等等。异常的消息是“创建窗口句柄错误”。我花了一些时间在微软支持网站上找到了解决这个问题的方法。这和我的案子很相似。来自现场的Qoute:
在.NET应用程序中,当父控件被深度嵌套时,停靠控件有时不会调整大小。这个问题既发生在64位平台上,也出现在32位平台上,但需要在32位系统上
我们从一个尚未被释放的表单上调用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
我试图在一些后台线程中使用一堆浏览器。当我使用在设计视图中放置在表单上的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)