object-c, Как отправить файл в качестве параметра

Но могу ли я прервать задачу (в .Net 4.0) таким же образом, а не механизмом отмены. Я хочу немедленно убить Задачу.

Другие ответчики сказали вам не делать этого. Но да, вы можете сделать это. Вы можете предоставить Thread.Abort() в качестве делегата, который будет вызван механизмом отмены задачи. Вот как вы могли бы настроить это:

class HardAborter
{
  public bool WasAborted { get; private set; }
  private CancellationTokenSource Canceller { get; set; }
  private Task<object> Worker { get; set; }

  public void Start(Func<object> DoFunc)
  {
    WasAborted = false;

    // start a task with a means to do a hard abort (unsafe!)
    Canceller = new CancellationTokenSource();

    Worker = Task.Factory.StartNew(() => 
      {
        try
        {
          // specify this thread's Abort() as the cancel delegate
          using (Canceller.Token.Register(Thread.CurrentThread.Abort))
          {
            return DoFunc();
          }
        }
        catch (ThreadAbortException)
        {
          WasAborted = true;
          return false;
        }
      }, Canceller.Token);
  }

  public void Abort()
  {
    Canceller.Cancel();
  }

}

отказ: не делайте этого.

Вот пример того, что не делать:

 var doNotDoThis = new HardAborter();

 // start a thread writing to the console
 doNotDoThis.Start(() =>
    {
       while (true)
       {
          Thread.Sleep(100);
          Console.Write(".");
       }
       return null;
    });


 // wait a second to see some output and show the WasAborted value as false
 Thread.Sleep(1000);
 Console.WriteLine("WasAborted: " + doNotDoThis.WasAborted);

 // wait another second, abort, and print the time
 Thread.Sleep(1000);
 doNotDoThis.Abort();
 Console.WriteLine("Abort triggered at " + DateTime.Now);

 // wait until the abort finishes and print the time
 while (!doNotDoThis.WasAborted) { Thread.CurrentThread.Join(0); }
 Console.WriteLine("WasAborted: " + doNotDoThis.WasAborted + " at " + DateTime.Now);

 Console.ReadKey();

output from sample code [/g1]

0
задан mag_zbc 13 July 2018 в 09:51
поделиться

1 ответ

[Обновлено с помощью imageNameStr]

При загрузке ваших данных изображения необходимо отправить имя файла. Чтобы сгенерировать файл Name, здесь я использовал дату и время.

Добавить код ниже строки NSLog(@"reqData=%@",reqData);

=============================

Вы пропустили formData Code. Где изображение является фактическим изображением в приведенном ниже коде.

NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"yyyyMMddhhmmssSSS"];
NSString *imageNameStr = [NSString stringWithFormat:@"%@.jpg",[formatter stringFromDate:[NSDate date]]];

[sessionManager POST:appendURL
              parameters:postParamDict
constructingBodyWithBlock:^(id<AFMultipartFormData> formData)

     {
         if(image!=nil){
             NSData * imageData = UIImageJPEGRepresentation(image,0.5f);

             if(imageData!=nil){
                 [formData appendPartWithFileData:imageData
                                             name:@"image"
                                         fileName:imageNameStr
                                         mimeType:@"image/jpg"];
             }
         }
     }
    progress:^(NSProgress * _Nonnull uploadProgress) {
    }
    success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {

                     NSLog(@"%@",responseObject);
                     if(success)
                         success (responseObject);


    }
    failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

                     NSLog(@"error %@",error);
                     if(failure)
                         failure (error);
    }]
0
ответ дан Vicky_Vignesh 17 August 2018 в 13:15
поделиться
  • 1
    Привет, Вики! Спасибо за ваш ответ, но я запутался в fileName: imageNameStr, что нужно и как мне передать имя моего файла! – sumita katkar 13 July 2018 в 11:44
  • 2
    подождите несколько секунд, я обновлю ответ. – Vicky_Vignesh 13 July 2018 в 11:47
  • 3
    @sumitakatkar проверить ответ сейчас, я его обновил! – Vicky_Vignesh 13 July 2018 в 11:55
  • 4
    'эта ошибка: «NSInvalidArgumentException», причина:' - [NSPathStore2 CGImage]: непризнанный селектор, отправленный экземпляру 0x608000449990 ' – sumita katkar 16 July 2018 в 10:03
  • 5
    Я использовал менеджер вместо sessionManager – sumita katkar 16 July 2018 в 11:41