小编Kru*_*lur的帖子

为什么Task.WaitAll()不会阻塞或导致死锁?

在下面的示例中await,使用了两个调用.为了获得性能,样本会被转换Task.WaitAll()(实际上并不是更快,但这只是一个例子).

这是来自Android上使用Sqlite.Net的库中的代码,该方法从OnResume()主UI线程调用:

public async Task SetupDatabaseAsync()
{
  await CreateTableAsync<Session>();
  await CreateTableAsync<Speaker>();
}
Run Code Online (Sandbox Code Playgroud)

这是替代方案:

public void SetupDatabaseAsync()
{
  var t1 = CreateTableAsync<Session>();
  var t2 = CreateTableAsync<Speaker>();

  Task.WaitAll(t1, t2);
}
Run Code Online (Sandbox Code Playgroud)

但是从我的理解Task.WaitAll()应该在等待时阻止UI线程,从而导致死锁.但它的工作正常.那是因为这两个调用实际上并没有在UI线程上调用任何东西吗?

如果我使用它有什么区别Task.WhenAll()?我猜它即使会调用UI线程也能工作,就像使用它一样await.

c# task-parallel-library async-await xamarin

11
推荐指数
1
解决办法
5729
查看次数

MonoDevelop:构建动作"内容"与"资源"相比是什么?

在我的应用程序中,所有图像,本地HTML页面等都标记为"构建操作内容".我刚刚意识到还有"资源".

我应该将哪一个用于图像,哪一个用于HTML页面在UIWebView中显示?

目前我使用这样的图像:

this.oImgLoginLogo.Image = UIImage.FromFile ( "Data/Images/ball.png" );
Run Code Online (Sandbox Code Playgroud)

但在Monotouch.Dialog中我看到这一行:

static UIImage arrow = Util.FromResource (null, "arrow.png");
Run Code Online (Sandbox Code Playgroud)

但是arrow.png也被标记为"内容"......?

困惑.

每种选择的不利/优势是什么?

monodevelop xamarin.ios

10
推荐指数
2
解决办法
3520
查看次数

在不使用transitionFromViewController时我必须发送的UIViewController包含消息的正确顺序是什么?

在实现UIViewController包含时,在将一个子控制器与另一个子控制器交换时,我必须发送以下消息的正确顺序是什么?

它是如下,还是我的订单不正确?我错过了消息吗?

  • 将新的子控制器添加到当前控制器addChildViewController:
  • 将新子控制器的子视图添加到当前控制器的视图中addSubview:
  • 运行从旧视图到新视图的一些奇特过渡.
  • 通知已添加到另一个控制器的新子控制器 didMoveToParentViewController:
  • 从其superview中删除以前控制器的视图removeFromSuperview::
  • 从其父级删除以前的子控制器removeFromParentViewController::

编辑: 我必须注意,上面只是你不使用UIViewController的转换方法而是想手动添加新视图的问题.

cocoa-touch uiviewcontroller xamarin.ios ios5

10
推荐指数
1
解决办法
976
查看次数

使用Xamarin.iOS获取iOS Library文件夹的正确方法是什么?

这将使我的iOS应用程序的文档根目录:

Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
Run Code Online (Sandbox Code Playgroud)

是否有类似的东西进入Library文件夹?

c# xamarin.ios ios xamarin

10
推荐指数
3
解决办法
6844
查看次数

如何在UINavigationController中使用UIViewControllerAnimatedTransitioning?

将视图控制器推到时,如何获得自定义转换(iOS7)UINavigationController?我尝试TransitioningDelegateUINavigationController我正在推动的控制器中设置两者.方法永远不会被调用.

我发现的所有示例在模态呈现时都使用自定义转换.

cocoa-touch xamarin.ios ios ios7

10
推荐指数
1
解决办法
3万
查看次数

如何回收我的SqliteCommand来加速这个Sqlite批量插入(iOS)?

我正在使用下面的代码批量插入30000行(一次1000行).它仍然没有那么快.在这个例子中提高SQLite的INSERT每秒性能?我可以看到他们只创建了SqliteCommand一次,然后重新循环它重置它并清除绑定.但是,我无法在iOS/Monotouch上找到合适的方法.没有Reset()ClearBindings()任何其他类似的东西.

using ( var oConn = new SqliteConnection ( "Data Source=" + DB_NAME ) )
{
    oConn.Open (  );

    // Wrap the whole bulk insertion into one block to make it faster, otherwise one transaction per INSERT would be created.
    // Note that this is differen from "BEGIN TRANSACTION" which would increase memory usage a lot!
    SqliteCommand oCmd = new SqliteCommand ( "BEGIN", oConn );
    oCmd.ExecuteNonQuery (  );
    oCmd.Dispose (  );

    foreach …
Run Code Online (Sandbox Code Playgroud)

c# sqlite xamarin.ios

9
推荐指数
1
解决办法
7207
查看次数

如何使UdpClient.ReceiveAsync()可以取消?

我有INetwork一个方法的接口:

Task<bool> SendAsync(string messageToSend, CancellationToken ct)
Run Code Online (Sandbox Code Playgroud)

接口的一个实现具有如下代码:

public async Task<bool> SendAsync(string messageToSend, CancellationToken ct)
{
  var udpClient = new UdpClient();
  var data = Encoding.UTF8.GetBytes (messageToSend);
  var sentBytes = await udpClient.SendAsync(data);
  return sentBytes == data.Length; 
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,SendAsync()在中UdpClient类不接受CancellationToken.

所以我开始将其改为:

public Task<bool> SendAsync(string messageToSend, CancellationToken ct)
{
  var udpClient = new UdpClient();
  var data = Encoding.UTF8.GetBytes (messageToSend);
  var sendTask = udpClient.SendAsync(data);
  sendTask.Wait(ct);

  if(sendTask.Status == RanToCompletion)
  {
    return sendTask.Result == data.Length;
  }
}
Run Code Online (Sandbox Code Playgroud)

显然这不起作用,因为没有Task被退回.但是,如果我返回任务,则签名不再匹配. …

c# asynchronous async-await

9
推荐指数
1
解决办法
7435
查看次数

如何复制HttpContent async和cancelable?

我正在使用HttpClient.PostAsync(),响应是一个HttpResponseMessage.其Content属性是HttpContent具有CopyToAsync()方法的类型.不幸的是,这是不可取消的.有没有办法将响应复制到a Stream并传递CancellationToken

我没有被困住CopyToAsync()!如果有解决方法,那就没问题了.就像读取几个字节一样,检查是否取消,继续阅读等等.

这些HttpContent.CreateContentReadStreamAsync()方法看起来像是候选人.不幸的是,它不适用于我选择的个人资料.还不清楚它是否会一次性读取所有数据并浪费大量内存.

注意:我在PCL中使用这个目标是WP8,Windows Store 8,.NET 4.5,Xamarin.iOS和Xamarin.Android

.net c# async-await dotnet-httpclient xamarin

9
推荐指数
1
解决办法
6446
查看次数

在创建Apple App ID时,"数据保护"的权利是什么?

我一直在iOS应用程序中使用最好的数据保护.这意味着我保存了所有文件,标记为"解锁时可用,仅此设备".那时候"刚刚工作".现在我发现创建App ID时有一个新设置(参见屏幕截图)我可以明确启用数据保护.

这就是我理解新选项的方式.有人可以确认一下吗?

  • 如果启用它,似乎使用所选保护模式自动保护文档文件夹中的所有文件.正确?
  • 如果禁用,我还可以使用NSFileManager?设置标志吗?

在此输入图像描述

data-protection ios

9
推荐指数
1
解决办法
2170
查看次数

Android的JobIntentService文档中提到了"JobService执行时间限制"多长时间?

在转换应用程序为Android Oreo做好准备时,我JobIntentService 在这里阅读了文档.

在那里我发现(重要部分强调):

当作为pre-O服务运行时,正常的服务执行语义适用:[...]作为Job运行时,将应用典型的JobService执行时间限制,之后作业将被停止(干净地,不是通过查杀过程)并重新安排以后继续执行.

如果我查看记录的限制,就没有关于任何执行时间限制的说法.同时JobScheduler没有提及任何东西.

  • 这是一个时间限制我应该不关心吗?
  • 它没有证件吗?
  • 或者不是/不再存在执行时间限制?
  • 或者我是否必须以可在任何给定时间点中断和重新启动的方式重新设计我的服务?最佳做法?

service android android-8.0-oreo

9
推荐指数
1
解决办法
1707
查看次数