简体   繁体   English

C#,传递事件不起作用

[英]C#, passing events doesn't work

I have this example code that DOES work. 我有可以工作的示例代码。

main form: 主要形式:

FileTransferManager fm = new FileTransferManager();

...
public FrmMain()
{
InitializeComponent();
...
fm.OnFile += fm_OnFile;
}

...
    void fm_OnFile(object sender, FileTransferEventArgs e)
    {
        var recvFile = new FrmReceiveFile(fm, e);
        recvFile.Show();
        e.Accept = true;
    }

and FrmReceiveFile: 和FrmReceiveFile:

public partial class FrmReceiveFile : Form
{
    private FileTransferManager fm;
    private FileTransferEventArgs ftea;
    public FrmReceiveFile(FileTransferManager ftm, FileTransferEventArgs fea)
    {
        InitializeComponent();

        fm = ftm;
        ftea = fea;

        Text = "File transfer: " + ftea.Jid;

        lblSize.Text = Util.HumanReadableFileSize(ftea.FileSize);
        lblFileName.Text = ftea.Filename;
        lblDescription.Text = ftea.Description;

        fm.OnError += fm_OnError;
        fm.OnEnd += fm_OnEnd;
        fm.OnStart += fm_OnStart;
        fm.OnProgress += fm_OnProgress;
    }


    void fm_OnStart(object sender, FileTransferEventArgs e)
    {
        MessageBox.Show("file transfer started"); ///// THIS APPEARS & EVERYTHING WORKS!
        if (e.Sid != ftea.Sid)
            return;
    }
...

And here is my code, all in one form, yet somehow it does not work. 这是我的代码,全都以一种形式出现,但是以某种方式却无法正常工作。

public partial class Form1 : Form
    {

        private string sid = "";

        FileTransferManager fmout = new FileTransferManager(); //// this FileTransferManager is for outgoing files
        FileTransferManager fmin = new FileTransferManager();  //// this FileTransferManager is for incomeing files
        FileTransferEventArgs fta = new FileTransferEventArgs();
        Jid _jid = new Jid();


        public Form1()
        {
            InitializeComponent();

            fmout.OnError += fmout_OnError;
            fmout.OnEnd += fmout_OnEnd;
            fmout.OnStart += fmout_OnStart;
            fmout.OnProgress += fmout_OnProgress;

            fmout.XmppClient = xmppClient;
            fmin.XmppClient = xmppClient;

            fmin.OnFile += fmin_OnFile;
            fmin.OnEnd += fmin_OnEnd;
            fmin.OnStart += fmin_OnStart;
            fmin.OnProgress += fmin_OnProgress;
        }

        ////////////////////////////////////////////////////////////////////////////////////////////

        void fmin_OnFile(object sender, FileTransferEventArgs e)
        {
            DisplayEvent("INCOMING FILE: " + e.Filename + " - " + e.FileSize); ///// THIS APPEARS CORRECTLY
            e.Accept = true;
            fta = e;
        }


        void fmin_OnStart(object sender, FileTransferEventArgs e) /// THIS WON'T START! :(
        {
            MessageBox.Show("Incoming file!"); /// THIS WON'T START! :( 
            if (e.Sid != fta.Sid)
                return;
        }

Looks like e.Accept = true; 看起来像e.Accept = true; does not launch fmin_OnStart ... any ideas what might be the problem? 没有启动fmin_OnStart ...任何想法可能是什么问题?

Thanks! 谢谢!

The difference (that can be made out from the code you have shared) in the two pieces of code is that in the first one you are registering the "fm.OnStart += fm_OnStart" event when your "OnFileHandler" is called, while in the other one (not working) you are doing that upfront, even when your OnFileHandler is not called. 这两段代码的区别(可以从共享的代码中看出)是,在第一个代码中,当调用“ OnFileHandler”时,您正在注册“ fm.OnStart + = fm_OnStart”事件,而在另一个(不起作用)您正在预先进行该操作,即使未调用OnFileHandler时也是如此。

Though, as an user of FileTransferManager, i dont think that should matter. 但是,作为FileTransferManager的用户,我认为这并不重要。

Still, you can try the same thing in the second code.. so do it as below. 不过,您可以在第二个代码中尝试相同的操作。

  void fmin_OnFile(object sender, FileTransferEventArgs e)        
 {     fmin.OnStart += fmin_OnStart; 
DisplayEvent("INCOMING FILE: " + e.Filename + " - " + e.FileSize); 
e.Accept = true;             fta = e;  }

If that works, i would rather question the programmer of FileTransferManager. 如果可行,我宁愿质疑FileTransferManager的程序员。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM