我试图检测最终用户是在手机,平板电脑还是个人电脑上
我已经谷歌搜索了一段时间,显然没有简单的解决方案.
好吧,我想我不应该使用Resolution,因为现在有些平板电脑具有惊人的分辨率.
我不应该依赖方向,因为windows8笔记本电脑可以像平板电脑一样旋转.(响应式设计对我目前的项目来说太难了)
我一直在尝试使用UserAgent(认为它也有它的缺点),但是无法让它工作,下面是我用来区分手机/平板电脑和PC的不同版本的联合,他们只是不工作和我不知道为什么
var agents = ['android', 'webos', 'iphone', 'ipad', 'blackberry','iemobile','phone','mobile'];
for(i in agents) {
if(navigator.userAgent.toLowerCase().match('/'+agents[i]+'/i')) {
return true;
}
}
if( /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent) ) {
return true;
}
if( navigator.userAgent.match(/Android/i)
|| navigator.userAgent.match(/webOS/i)
|| navigator.userAgent.match(/iPhone/i)
|| navigator.userAgent.match(/iPad/i)
|| navigator.userAgent.match(/iPod/i)
|| navigator.userAgent.match(/BlackBerry/i)
|| navigator.userAgent.match(/Windows Phone/i)
|| navigator.userAgent.match(/bada/i)
|| navigator.userAgent.match(/Bada/i)
){
return true;
}
Run Code Online (Sandbox Code Playgroud) 我从一个沉重的java背景中对C#有点新,并且仍在试图弄清楚await和async是如何工作的,这里有什么令我困惑的事情:
假设我有一个这样的函数(下面的Hackish代码仅用于实验):
public static bool CheckInternetConnection()
{
Task<bool> result = CheckInternetConnectionAsync();
return result.Result;
}
public async static Task<bool> CheckInternetConnectionAsync()
{
if (NetworkInterface.GetIsNetworkAvailable())
{
SomeClass details = await ReturnARunningTask();
return details.IsSuccessful;
}
return false;
}
public Task<SomeClass> ReturnARunningTask()
{
return Task.Run(() => checkInternet());
}
Run Code Online (Sandbox Code Playgroud)
在主执行线程中,如果我调用它:
CheckInternetConnection();
Run Code Online (Sandbox Code Playgroud)
它将无限期地阻塞,我的假设是控制在"await"关键字上留下CheckInternetConnectionAsync()并阻止".Result".等待恢复时,主线程已被阻止并保持阻塞状态
我假设的原因是我可以看到任务完成并返回,但是await之后的代码永远不会被执行
但是,如果我这样做:
bool result = Task.Run(() => CheckInternetConnection()).Result;
Run Code Online (Sandbox Code Playgroud)
然后执行await语句后的代码,主线程继续
我的期望是它也会阻塞,因为主线程将在中间任务上被阻塞.中间任务将被阻止在.Result上
那么......有什么不同?在这种情况下,await执行后的代码是什么?
我有一个C++程序,不能简单
#include <string>
#include <iostream>
using namespace std;
void throwE(){
throw "ERROR";
}
int main(int argc, char* argv[]){
try{
throwE();
} catch(const std::string& msg){
cerr << msg << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但它在运行时会引发异常:
libc++abi.dylib: terminate called throwing an exception
Abort trap: 6
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我为什么会发生这种情况,为什么没有发现异常?