locked
Load file async crashes if in snapmode

    Question

  • Does anyone know why the following code crashes if in snapmode ?

    It works fine in full screen mode.

    	
    void SimpleTextRenderer::loadfile()
    {
    
     
    	
        //pick pcb      
    	FileOpenPicker^ openPicker = ref new FileOpenPicker();
    	openPicker->ViewMode = PickerViewMode::List;   //or Thumbnail;
    	openPicker->SuggestedStartLocation = PickerLocationId::PicturesLibrary;
        openPicker->FileTypeFilter->Append(".pcb");
    
    	
    		task<StorageFile^> fileTask(openPicker->PickSingleFileAsync());
    	fileTask.then([=](StorageFile^ file) {
    
    		if (file==nullptr)
    			return;
    
    
    
    
    		String^ fileName="4000.pcb"; 
    
    
    		fileName=file->Name;
    		previousfname=fileName;
    		gerberfilename=file->DisplayName; //get name with no extension !!!
    	
    	StorageFolder^ item = KnownFolders::PicturesLibrary;
     
      auto getFileOp = item->GetFileAsync(fileName);
      getFileOp->Completed = ref new AsyncOperationCompletedHandler<StorageFile^>
        ([=](IAsyncOperation<StorageFile^>^ operation, AsyncStatus status)
      {
        auto storageFile = operation->GetResults();
        auto openOp = storageFile->OpenAsync(FileAccessMode::Read);
        openOp->Completed = 
          ref new AsyncOperationCompletedHandler <IRandomAccessStream^>
          ([=](IAsyncOperation<IRandomAccessStream^>^ operation, AsyncStatus status)
        {
          auto istream = operation->GetResults();
          auto dr = ref new DataReader(istream);
          auto loadOp = dr->LoadAsync(istream->Size);
          loadOp->Completed = ref new AsyncOperationCompletedHandler<UINT>
            ([=](IAsyncOperation<UINT>^ operation, AsyncStatus status)
          {
            auto bytesRead = operation->GetResults();
    
    
    		int cx,wurd,dx;	
    		wurd=0;
               //wurd=(UINT16)rev(dr->ReadUInt16());
    
    
    		
                ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
                //{load SYMBOLS}
    
                wurd=(UINT16)rev(dr->ReadUInt16());
                cx = wurd;
                wurd=(UINT16)rev(dr->ReadUInt16());
                cx = cx + (wurd * 65536);
    
                for (dx = 1; dx <= cx; dx++)
                {
                    wurd=(UINT16)rev(dr->ReadUInt16());
                    symboldata[dx] = wurd;
                }
    
                ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
                //{load TRACKS}
                wurd=(UINT16)rev(dr->ReadUInt16());
                cx = wurd;
                wurd=(UINT16)rev(dr->ReadUInt16());
                cx = cx + (wurd * 65536);
    
                for (dx = 1; dx <= cx; dx++)
                {
                    wurd=(UINT16)rev(dr->ReadUInt16());
                    trackdata[dx] = wurd;
                }
    
    
                ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
                //{load PADS}
                wurd=(UINT16)rev(dr->ReadUInt16());
                cx = wurd;
                wurd=(UINT16)rev(dr->ReadUInt16());
                cx = cx + (wurd * 65536);
    
                for (dx = 1; dx <= cx; dx++)
                {
                    wurd=(UINT16)rev(dr->ReadUInt16());
                    //	{padata[cx]=wurd;}
                }
    
    
                ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
                //{load TEXT}
                wurd=(UINT16)rev(dr->ReadUInt16());
                cx = wurd;
                wurd=(UINT16)rev(dr->ReadUInt16());
                cx = cx + (wurd * 65536);
    
                for (dx = 1; dx <= cx; dx++)
                {
                    wurd=(UINT16)rev(dr->ReadUInt16());
                    textdata[dx] = wurd;
                }
    
    
    
                ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
                //{load CONS}
                wurd=(UINT16)rev(dr->ReadUInt16());
                cx = wurd;
                wurd=(UINT16)rev(dr->ReadUInt16());
                cx = cx + (wurd * 65536);
    
                for (dx = 1; dx <= cx; dx++)
                {
                    wurd=(UINT16)rev(dr->ReadUInt16());
                    //	{condata[dx]=wurd;}
                }
    
    
    
    
    
                ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
                //{load INTLIB}
    
    
                wurd=(UINT16)rev(dr->ReadUInt16());
                cx = wurd;
                wurd=(UINT16)rev(dr->ReadUInt16());
                cx = cx + (wurd * 65536);
    
                for (dx = 1; dx <= cx; dx++)
                {
                    wurd=(UINT16)rev(dr->ReadUInt16());
                    slibrary[dx] = wurd;
                }
    
    			dr->DetachStream();
    
    
                ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
    
                removeduplicatessymbols(); //in case some schems got duplicated
    
                lineuptracks();// {in case pcb come from translator with new symbol shapes}
    
    
    
    //			loadrefstring();
    				adjustzoom();
    				redraw();
    
    			
    			/* print out load file size
    				//
                char buffer [33];
    			_itoa_s(bytesRead, buffer,10);
    				titlestring=buffer;
    				shortredraw();
    				*/
    
    
            
          });
        });
      });
    
      });
    	
    			  
    }
    


    n.Wright

    Monday, September 2, 2013 2:40 PM

Answers

  • If you use a filepicker then the filepicker will crash out in snap mode.

    I have stopped the filepicker working with a warning if in snapped mode.


    n.Wright

    Monday, September 2, 2013 8:01 PM