我和我的一些同事正在共同开展一个项目,遇到了一个我们无法解决的奇怪问题。
该项目涉及在客户端和客户端之间建立VNC连接。服务器,用C#编写(我们使用的是Visual Studio 2010)。我们正在为客户端使用VNCSharp library。
我所说的问题是,一旦我们开始与服务器建立连接,就会抛出ArgumentException。
提供的一些信息是:
********** 例外文字 **********
System.ArgumentException:参数无效 在System.Drawing.Bitmap..ctor(Int32宽度,Int32高度,PixelFormat格式)
在VncSharp.RemoteDesktop.SetupDesktop()
在VncSharp.RemoteDesktop.Initialize()
at VncSharp.RemoteDesktop.Connect(String host,Int32 display,Boolean viewOnly,Boolean scaled)
在VncSharp.RemoteDesktop.Connect(String host)
在RemoteDesktopTest.Form2.startConnection()
另一个奇怪的事情是,它只会发生一些次,而在其他时候,它的效果非常好。具体来说,它总是在调试模式下运行时(即,当我们使用F11逐行运行程序时),并且在定期运行时工作或不起作用(即Ctrl + F5),没有任何模式我们可以认出来。
我们非常感谢任何和所有的帮助;如果我可以添加任何有助于回答此问题的详细信息,请告诉我。 另外,我为任何语法/拼写错误道歉;英语不是我的第一语言......如果有关于这个问题的事情不合适,我也会道歉。我们都是初学者,这是我们的第一个"大项目",所以这也是我第一次在Stack Overflow中提问。
编辑:
代码的某些部分可能具有相关性
这些是我们将VncSharp控件添加到表单并自定义其设置后自动生成的代码行:
this.remoteDesktop1 = new VncSharp.RemoteDesktop();
this.remoteDesktop1.AutoScroll = true;
this.remoteDesktop1.AutoScrollMinSize = new System.Drawing.Size(608,427);
this.remoteDesktop1.Dock = System.Windows.Forms.DockStyle.Fill;
this.remoteDesktop1.Location = new System.Drawing.Point(0,0);
this.remoteDesktop1.Name =" remoteDesktop1&#34 ;;
this.remoteDesktop1.Size = new System.Drawing.Size(1113,580);
this.remoteDesktop1.TabIndex = 1;
这是我调用Connect方法的代码行,而IP只是从文本框中取出的字符串:
remoteDesktop1.Connect(this.IP);
这些来自处理ConnectComplete事件的方法(e是传递给方法的EventArgs对象):
this.Location = new Point(0,0);
this.Size = Screen.PrimaryScreen.WorkingArea.Size;
this.remoteDesktop1.Size = new System.Drawing.Size(e.DesktopWidth,e.DesktopHeight);
除了调用Disconnect方法的行之外,我们还没有编写任何处理此对象的其他代码行。如果我意识到我忘了某些东西,我会再次编辑并添加它。另外,如果我在这里添加了特定的代码,请告诉我。
答案 0 :(得分:1)
这个问题似乎与时间有关 在调试模式之外,程序运行得太快,宽度和高度变量没有更新它们的值 幸运的是,VncSharp是开源的,所以只要这两个变量中的任何一个仍然具有默认值,我就可以添加自己的行并将其保留在循环中,现在它可以正常工作。
感谢大家的帮助:)
答案 1 :(得分:0)
有同样的问题。对我来说,它可以在调试模式下编译vncsharp解决方案。
答案 2 :(得分:0)
在RfbProtocol第398行(ReadServerInit
方法的第一行)中,我进行了转换
int w = Reader.ReadUInt16();
到
int w = 0;
while (w == 0)
w = Reader.ReadUInt16();