如果你在架构中的较低级别使用async/await,是否有必要"冒泡"async/await调用一直向上,这是低效的,因为你基本上是为每个层创建一个新线程(异步调用每个层的异步函数,或者它真的不重要,只是取决于您的偏好?
我正在使用EF 6.0-alpha3,以便我可以在EF中使用异步方法.
我的存储库是这样的:
public class EntityRepository<E> : IRepository<E> where E : class
{
public async virtual Task Save()
{
await context.SaveChangesAsync();
}
}
Run Code Online (Sandbox Code Playgroud)
现在我的业务层是这样的:
public abstract class ApplicationBCBase<E> : IEntityBC<E>
{
public async virtual Task Save()
{
await repository.Save();
}
}
Run Code Online (Sandbox Code Playgroud)
当然,我的UI中的方法在调用时会遵循相同的模式.
这是:
即使在单独的图层/项目中没有使用它,如果我在同一个类中调用嵌套方法,则同样的问题也适用:
private async Task<string> Dosomething1()
{
//other stuff
...
return await Dosomething2();
}
private async Task<string> Dosomething2()
{
//other stuff
...
return await Dosomething3();
}
private async Task<string> Dosomething3()
{
//other stuff
... …
Run Code Online (Sandbox Code Playgroud) 是否有可能在C#中做这样的事情:
public void DoSomething<T>(T t)
{
if (T is MyClass)
{
MyClass mc = (MyClass)t
...
}
else if (T is List<MyClass>)
{
List<MyClass> lmc = (List<MyClass>)t
...
}
}
Run Code Online (Sandbox Code Playgroud) 我试图找出MEF的构造函数注入属性.我不知道如何告诉它加载构造函数的参数.
这是我正在尝试加载的属性
[ImportMany(typeof(BUsers))]
public IEnumerable<BUsers> LoadBUsers { get; set; }
Run Code Online (Sandbox Code Playgroud)
这是我用来导入程序集的代码.
try
{
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly()));
catalog.Catalogs.Add(new DirectoryCatalog("DI"));
var container = new CompositionContainer(catalog);
container.ComposeParts(this);
}
Run Code Online (Sandbox Code Playgroud)
这是我正在尝试加载的类
[Serializable]
[Export(typeof(BUsers))]
public class EditProfile : BUsers
{
[ImportingConstructor]
public EditProfile(string Method, string Version)
{
Version = "2";
Action = "Edit";
TypeName = "EditProfile";
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Xamarin.Auth(https://components.xamarin.com/view/xamarin.auth/)存储我的凭据,就像我一直以来一样.
var accountStore = AccountStore.Create ();
foreach (var account in accountStore.FindAccountsForService("myAppName"))
accountStore.Delete (account, "myAppName");
AccountStore.Create().Save(acc, "myAppName");
Run Code Online (Sandbox Code Playgroud)
升级到iOS 10后,我收到此错误存储凭据:
"Could not save account to KeyChain: -34018"
at Xamarin.Auth.KeyChainAccountStore.Save (Xamarin.Auth.Account account,System.String serviceId) [0x000b2] in <402cf9b3716845b3bdddef581cb33a3e>:0
Run Code Online (Sandbox Code Playgroud)
安装最新版本1.2.3.1问题似乎只存在于SIMULATOR上
如何将某个对象的实例传递给Xamarin Forms custom render
?
这是自定义渲染器......
public class LoginPageRenderer : PageRenderer
{
public override void ViewDidAppear (bool animated)
{
....
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我想要做的......(注意ctor已被添加......)
public class LoginPageRenderer : PageRenderer
{
private SomeFoo _someFoo;
public LoginPageRenderer(MyFoo someFoo)
{
_someFoo = someFoo;
}
public override void ViewDidAppear (bool animated)
{
....
}
}
Run Code Online (Sandbox Code Playgroud)
最后,这是调用此视图的位置(在代码的其他部分).
await _navigationPage.Navigation.PushModalAsync(new LoginPage());
我想在将结果输入OStateUserId对象后运行此语句.
details.Text = OStateUserID.name + "\n" + OStateUserID.population);
bStateuserID.Click += async delegate
{
details.Text=" ";
Guid x = new Guid("33F8A8D5-0DF2-47A0-9C79-002351A95F88");
state OStateUserID =(state) await obj.GetStateByUserId(x.ToString());
details.Text = OStateUserID.name + "\n" + OStateUserID.population);
};
Run Code Online (Sandbox Code Playgroud)
GetStateByUserId()
方法返回一个对象class State
.
它以异步方式运行.完成操作后,我想将名称和填充分配给TextView详细信息.
我RunOnUIThread()
在这种情况下如何使用?
我试图将一些项添加到Listview,我在xaml文件中使用Xamarin.Forms标记添加.可以通过单击事件挂钩来访问该按钮.但由于列表视图为空,我需要ondraw
类似winforms 的事件,以便在绘制时可以挂钩.
在XAML文件中,我有:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="ButtonXaml.ButtonXamlPage">
<StackLayout>
<Button Text="Tap for click count!"
BorderWidth="10"
TextColor="Red"
HorizontalOptions="Center"
Clicked="OnButtonClicked" />
<ListView
HorizontalOptions="Center"
/>
</StackLayout>
</ContentPage>
Run Code Online (Sandbox Code Playgroud)
在我的.cs文件中
using System;
using Xamarin.Forms;
namespace ButtonXaml
{
public partial class ButtonXamlPage
{
int count = 0;
public ButtonXamlPage()
{
InitializeComponent();
}
public void OnButtonClicked(object sender, EventArgs args)
{
((Button)sender).Text = "You clicked me";
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以我应该挂钩Listview中的事件,还是可以Resource.getElementbyID
像我们在android中那样做
所以我第一次使用Twitter的Bootstrap,我试图在它们崩溃后更改下拉菜单中文本的颜色.(如果这是有道理的)
我使用这个网站(<<< ---我正在使用的CSS链接)来帮助一些CSS,但我似乎无法找到正确的代码块来改变正确文本的颜色.
当您压缩网页以显示折叠菜单并转到下拉列表时,您将看到蓝色背景转移到下拉菜单项,但字体颜色为黑色,因此很难阅读.我希望这个字体是白色的.
<nav class="navbar navbar-custom" role="navigation">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse"
data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">ATR Notary</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li class="dropdown">
<a href="~/Order/Index" class="dropdown-toggle"
data-toggle="dropdown">Orders <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="~/Order/Index">View Orders</a></li>
<li><a href="~/Order/Create">Add Order</a></li>
</ul>
</li> …
Run Code Online (Sandbox Code Playgroud) 我有一个绑定到ViewModel的Xamarin表单.创建此ViewModel时,我希望它以异步方式从数据库中获取数据.我的问题是我不确定如何调用异步方法,因为构造函数无法调用异步方法,并且getter无法调用异步方法.
我在UI中使用纯XAML,XAML是否可以在初始化时调用方法?
我的ViewModel:
public class DonorViewModel : BaseViewModel
{
public DonorViewModel (IRepository<Donor> donorRepository)
{
_donorRepository = donorRepository;
}
private string _name;
public string Name {
get {
return _name;
}
set {
if (_name != value) {
_name = value;
OnPropertyChanged ("Name");
}
}
}
private IRepository<Donor> _donorRepository;
private async Task GetName()
{
var donor = await _donorRepository.Get(d => d.Id == 1);
Name = donor.Name;
}
}
Run Code Online (Sandbox Code Playgroud)
我的XAML:
<?xml version="1.0" encoding="UTF-8"?>
<d:ViewPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="DonationExample.DonorView"
xmlns:d="clr-namespace:DonationExample;assembly=DonationExample"
x:TypeArguments="local:DonorViewModel"
xmlns:local="clr-namespace:DonationExample">
<ContentPage.BindingContext>
</ContentPage.BindingContext> …
Run Code Online (Sandbox Code Playgroud) 我创建了一个自定义组件,它扩展了ContentView和渲染器,渲染到Android上的CardView.
我面临的问题是Forms内容是在CardView下面呈现的.在KitKat上,这不会发生,但我认为CardView实现与Lollipop或更新版本不同.
将CardView的背景颜色设置为透明(0x00000000)会显示CardView下方的内容.
表单组件:
using Xamarin.Forms;
namespace CodeFest
{
public class NativeClientProfile : ContentView
{
public NativeClientProfile()
{
var grid = new Grid
{
RowDefinitions = new RowDefinitionCollection {new RowDefinition()},
ColumnDefinitions = new ColumnDefinitionCollection {new ColumnDefinition(), new ColumnDefinition()}
};
grid.Children.Add(new Label {Text = "FSP No"}, 0, 0);
grid.Children.Add(new Label {Text = "12345", HorizontalTextAlignment = TextAlignment.Center}, 1, 0);
grid.Children.Add(new Label {Text = "Risk"}, 0, 1);
grid.Children.Add(
new Label {Text = "Low", TextColor = Color.Green, HorizontalTextAlignment = TextAlignment.Center}, 1, 1);
var item …
Run Code Online (Sandbox Code Playgroud) xamarin ×5
c# ×4
.net ×1
android ×1
async-await ×1
asynchronous ×1
c#-5.0 ×1
css ×1
generics ×1
mef ×1
mono ×1
typechecking ×1
xamarin.auth ×1
xamarin.ios ×1