Printing Monotouch-EASession输出流给出空错误

Printing Monotouch-EASession输出流给出空错误,printing,xamarin.ios,outputstream,Printing,Xamarin.ios,Outputstream,在这里找人帮忙 当我运行这段代码(如下)时,当我第二次处理它时,它崩溃了。 它在未设置对象引用时崩溃。。在session.outputstream上 var session= new EASession(accessory, "net.gebe"); session.OutputStream.Open(); 第二次session.outputstream为空。即使在处理会话时也是如此 理查德 public void PrintIt() { var _accessor

在这里找人帮忙

当我运行这段代码(如下)时,当我第二次处理它时,它崩溃了。 它在未设置对象引用时崩溃。。在session.outputstream上

var session= new EASession(accessory, "net.gebe"); 

session.OutputStream.Open();
第二次session.outputstream为空。即使在处理会话时也是如此

理查德

   public void PrintIt()
    {
     var _accessoryList = EAAccessoryManager.SharedAccessoryManager.ConnectedAccessories;

     accessory = null;

     foreach(var obj in _accessoryList)
     {
      if(obj.ProtocolStrings.Contains("net.gebe"))
      {
       accessory = obj;
       //break;
      }             
     }

     if(accessory == null)
     {          
      //tmg.InfoAlert ("No Printer");
      return;
     }


     var session= new EASession(accessory, "net.gebe"); 

     session.OutputStream.Open();

     string str2 = "HELLO THERE PRINTER 1 2 3 4 5";

     byte[] printdata2;

     ASCIIEncoding   encoding2 = new ASCIIEncoding();

     printdata2 = encoding2.GetBytes(str2); 

     uint nlen2 = Convert.ToUInt32 (str2.Length+1);

     session.OutputStream.Write(printdata2,nlen2 ); 

     session.OutputStream.Close ();

     session.Dispose ();
    }

我现在让我的工作。我所做的:

  • 将会话另存为类中的变量
  • 仅当会话为空时创建会话
  • 您可能不希望在每次打印后调用session.OutputStream.Close()。至少在针对您的情况进行调试时要记住这一点
这将允许在同一页上进行多个打印作业,而不会发生爆炸。在这种情况下,session.OutputStream不是null

我还发现ViewDidLoad/Unload事件对于通过EAAccessoryDidConnectNotification和EAAccessoryDidDisconnectNotification观察者检测设备何时变为可用/不可用不是很好。取而代之的是,我使用了viewdideappease/viewdideglobe。在这些方法中,我拆掉会话,当我回来打印一个新作业时,会话被创建并分配OutputStream

最后,我没有通过session.OutputStream.OnEvent为我的设备触发事件。我还不确定这是我的设备,是一个单触式错误,还是我的一个普通错误


更新:查看这个包装精美的

实现,我现在已经开始工作了。我所做的:

  • 将会话另存为类中的变量
  • 仅当会话为空时创建会话
  • 您可能不希望在每次打印后调用session.OutputStream.Close()。至少在针对您的情况进行调试时要记住这一点
这将允许在同一页上进行多个打印作业,而不会发生爆炸。在这种情况下,session.OutputStream不是null

我还发现ViewDidLoad/Unload事件对于通过EAAccessoryDidConnectNotification和EAAccessoryDidDisconnectNotification观察者检测设备何时变为可用/不可用不是很好。取而代之的是,我使用了viewdideappease/viewdideglobe。在这些方法中,我拆掉会话,当我回来打印一个新作业时,会话被创建并分配OutputStream

最后,我没有通过session.OutputStream.OnEvent为我的设备触发事件。我还不确定这是我的设备,是一个单触式错误,还是我的一个普通错误


更新:查看这个包装精美的

实现。您需要在Info.plist中列出要使用的外部附件

苹果网站上有一些关于这方面的文档:

以下是如何在Info.plist中设置此值的屏幕截图:


(此处:)

您需要在Info.plist中列出要使用的外部配件

苹果网站上有一些关于这方面的文档:

以下是如何在Info.plist中设置此值的屏幕截图:

(这里是:)