我有一个基于Windows.Form的Visual Community 2015设计的项目。
我想实现一个简单的服务器程序 - 使用msdn库:
https://msdn.microsoft.com/en-us/library/fx6588te%28v=vs.110%29.aspx
所以我用设计器创建了一个简单的Form1,其中包含一个richTextbox(名称:llog)和一个按钮(单击事件pushthebutton),它调用了一个外部类AsynchronousSocketListener。在此之后,它应该是调用一个方法logme()并弹出一个消息框(它工作,我看到这一点)。但我无法写入richTextbox llog。我没有错误,但没有任何内容写入框中。我记得,它与调用或委托问题有关。但我无法弄清楚。我坚持5个小时没有解决方案。任何人都可以帮助我 - 我必须做什么,从AsynchronousSocketListener()类访问该框?我不知道,为什么我没有错误!
你看到我的最后一次尝试 - 我也尝试在每个方法调用上解析表单作为参数(没有任何作用) - 但我不能相信,这是正确的方式......
ps:英语不好,我知道......
// Form1.cs - I reduced it to the min - a window with a textbox and a button appears
namespace MyProject
{
public partial class Form1 : Form {}
public void pushthebutton() {
AsynchronousSocketListener srv = new AsynchronousSocketListener();
srv.StartListening();
}
}
// AsynchronousSocketListener.cs
namespace MyProject
{
public class AsynchronousSocketListener : Form1
{
// Thread signal.
public static ManualResetEvent allDone = new ManualResetEvent(false);
public Form1 form;
public AsynchronousSocketListener()
{
form = new Form1();
logme(this, "constructer");
}
public void logme(Form1 form, string s)
{
MessageBox.Show("inside logme");
if (llog.InvokeRequired)
{
// invoke needed
form.llog.Invoke((MethodInvoker)delegate { llog.AppendText("\r\n" + s); llog.ScrollToCaret(); });
}
else
{
// no invoke needed
llog.AppendText("\r\n" + s);
llog.ScrollToCaret();
}
}
}
}
// inside FormDesigner.cs - shortcut; box is public...
public System.Windows.Forms.RichTextBox llog;
答案 0 :(得分:0)
我还没有永远使用winforms,所以我不知道这是不是一个好习惯,但在AsynchronousSocketListener
中,你所做的只是实例化一个新的form
与任何事情无关。您可能希望将表单实际传递到那里
public AsynchronousSocketListener(Form1 parent)
{
form = parent;
logme(this, "constructer");
}
并在Form1中
AsynchronousSocketListener srv = new AsynchronousSocketListener(this);
在旁注中,我不明白为什么AsynchronousSocketListener
从Form1
继承,如public class AsynchronousSocketListener : Form1
行所示,似乎没有完成任何事情