小编Mat*_*ias的帖子

C#应用程序在远程时保持冻结

我正在开发一个在服务器上运行的C#应用​​程序(.Net 3.5,Win Forms),并由使用远程桌面的用户访问.应用程序在远程计算机上看似随机的场合一直处于冻结状态(即所有GUI组件都变为白色,任务管理器报告应用程序没有响应),但在本地运行时却没有(我不完全确定,但未能在我的机器上重现冻结).

有没有人在他的远程访问的应用程序中遇到过这样的行为?你会建议什么样的调试策略?在开发远程桌面访问的Win Forms应用程序时,是否需要考虑一些特殊问题?

编辑:有关应用程序和冻结的一些注意事项:应用程序无法从冻结中恢复.此外,冻结在用户交互期间不会发生(或尚未发生),而是在登录到远程计算机之间.该应用程序监视CFD求解器,因此即使没有人使用它也会执行操作.

更新:

我们确实实现了详细的日志记录,将每个函数调用写入带有时间戳的文件.不幸的是,结果并不是很有说服力.即记录的最后一个函数调用总是正确返回.此外,有一些后台计时器仍在运行,即使应用程序出现了冻结(GUI完全白色等).经过一些麻烦,我们成功地看看在WinDbg中故障转储.在系统线程中,我们发现了对OnUserPreferenceChanged()的调用,并进一步调用了Invoke.WaitOne().我们不能肯定地说,但这似乎是这些 文章中描述的问题.作为一个快速修复,我为上述事件安装了一个虚拟处理程序.我会报告这是如何工作的.

更新2:

事实证明,登录到远程计算机会触发几个OnUserPreferenceChanged()事件.所以这确实是疑似问题.事实证明,修复并不那么容易.我希望每次后台线程尝试修改在系统线程上创建的控件时都会抛出IllegalCrossReferenceException.似乎并非如此.我命名了我的系统线程,在每次访问控件之前,我断言当前线程名称是系统线程的名称.在各个地方,这个断言失败了(例如,在来自计时器的回调中),但没有抛出任何异常.在这些地方使用适当的授权后,冻结停止了.应用程序运行不间断几周,我的用户再次开心;)

c# remote-desktop .net-3.5

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

将派生类的指针数组转换为基类指针数组

考虑像这样的继承层次结构: A / \ B1 B2 \ / C | D 在C++中实现,如下所示:

class A {
public:
    A() {};
    virtual ~A() = 0;
    double a;
};

A::~A() {};

class B1 : virtual public A {
public:
    B1() {}
    virtual ~B1() {}
    double b1;
};

class B2 : virtual public A {
public:
    B2() {}
    virtual ~B2() {}
    double b2;
};

class C : public B1, public B2 {
public:
    C() {}
    virtual ~C() {}
    double c;
};

class D : public …
Run Code Online (Sandbox Code Playgroud)

c++ arrays polymorphism multiple-inheritance

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