我有一个场景.(Windows Forms,C#,.NET)
UserControl_Load
方法,则UI在加载方法执行的持续时间内变得无响应.伪代码看起来像这样:
代码1
UserContrl1_LoadDataMethod()
{
if (textbox1.text == "MyName") // This gives exception
{
//Load data corresponding to "MyName".
//Populate a globale variable List<string> which will be binded to grid at some later stage.
}
}
Run Code Online (Sandbox Code Playgroud)
它给出的例外是
跨线程操作无效:从创建它的线程以外的线程访问控件.
为了更多地了解这一点,我做了一些谷歌搜索,并提出了一个建议,如使用下面的代码
代码2
UserContrl1_LoadDataMethod()
{
if (InvokeRequired) // Line #1
{
this.Invoke(new MethodInvoker(UserContrl1_LoadDataMethod));
return;
}
if (textbox1.text == "MyName") // Now it wont give an exception
{
//Load data correspondin to "MyName"
//Populate a globale …
Run Code Online (Sandbox Code Playgroud) 两者之间有什么区别(如果有的话)(相对于.Net)?
适用于角度版本1.3.4.在以下代码段中,ng-change事件不起作用.
依赖:Bootstrap版本3.3.0
以下代码适用于版本1.2.27
var app = angular.module("demoApp", ['ngRoute']);
app.controller('DemoController', function ($scope) {
init();
function init() {
$scope.newItemType = 'bill';
$scope.change = function () {
alert($scope.newItemType)
};
}
});
app.config(function ($routeProvider) {
$routeProvider
.when('/prerak/list', {
controller: 'DemoController',
templateUrl: '/app/views/demo.html'
})
});
Run Code Online (Sandbox Code Playgroud)
<h4>Demo</h4>
<br />
<div>
<div class="btn-group" data-toggle="buttons">
<label class="btn btn-success">
<input type="radio" value="bill" ng-change="change()" ng-model="newItemType"> Insert New Bill <span class="glyphicon glyphicon-file"></span>
</label>
<label class="btn btn-success">
<input type="radio" value="coin" ng-change="change()" ng-model="newItemType"> Insert New Coin <span class="glyphicon glyphicon-adjust"></span>
</label>
</div> …
Run Code Online (Sandbox Code Playgroud) 我还是很困惑......当我们写下这样的东西时:
Object o = new Object();
var resource = new Dictionary<int , SomeclassReference>();
Run Code Online (Sandbox Code Playgroud)
...并且有两个代码块o
在访问时锁定resource
...
//Code one
lock(o)
{
// read from resource
}
//Code two
lock(o)
{
// write to resource
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我有两个线程,一个线程执行代码读取resource
和另一个写入它,我想要锁定resource
,当它被读取时,编写器将不得不等待(反之亦然 - 如果它正在写到,读者必须等待).锁构造能帮助我吗?......或者我应该使用别的东西?
(我Dictionary
用于此示例的目的,但可以是任何东西)
我特别关注两种情况:
将lock
在两个条件帮助?
我有两个代码示例.第一个不编译,但第二个编译.
代码示例1 (不编译)
public void MyMethod(){
int i=10;
for(int x=10; x<10; x++) {
int i=10; // Point1: compiler reports error
var objX = new MyOtherClass();
}
var objX = new OtherClassOfMine(); // Point2: compiler reports error
}
Run Code Online (Sandbox Code Playgroud)
我理解编译器报告错误的原因Point1
.但我不明白为什么它报告错误Point2
.如果你说这是因为MSIL中的组织,那为什么第二个代码示例会编译?
代码示例2 (编译)
public void MyMethod(){
for(int x=10; x<10; x++) {
int i=10;
var objX = new MyOtherClass();
}
for(int x=10; x<10; x++) {
int i=10;
var objX = new MyOtherClass();
}
}
Run Code Online (Sandbox Code Playgroud)
如果变量范围的简单规则适用于代码示例2,那么为什么这些规则不适用于代码示例1?
我浏览了http://www.asp.net/aspnet/overview/owin-and-katana/an-overview-of-project-katana,并想知道HTTP模块和owin中间件之间有什么区别.我能想到的一些指针是
1)Owin中间件将应用程序与主机/服务器分离.因此,我不再需要将我的应用程序逻辑专门挂钩到System.Web
2)Owin中间件按添加顺序执行(不确定HttpModules是否也适用;可能取决于我在web.config中添加它们的方式)
3)HttpModules帮助我附加特定于应用程序事件的代码.Owin中间件独立于这些事件
另请告诉我使用OWIN模块而不是HttpModule的实际示例.
我最终阅读的更多链接 (我将继续添加到这里,当我遇到新的) http://www.cloudidentity.com/blog/2013/07/23/securing-a-web-api-with- Windows的Azure的广告和武士刀/
更新:也许这有我正在寻找的答案 http://www.asp.net/aspnet/overview/owin-and-katana/owin-middleware-in-the-iis-integrated-pipeline
谢谢.
我知道我们不能在课堂上这样做,但在方法层面,我们总能做到这一点.
var myList=new List<string> // or something else like this
Run Code Online (Sandbox Code Playgroud)
这个问题出现在我的脑海中,因为无论我们在哪里声明这样的变量.我们总是在表达式的RHS中提供类型信息.所以编译器不需要做类型猜测.(如果我错了,请纠正我).
所以问题仍然是为什么不在班级,而在方法层面允许
我有这个配置
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "TestRoute",
url: "home/MyTestDrillDown/{productcat}",
defaults: new { controller = "Home", action = "MyTestDrillDown" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
Run Code Online (Sandbox Code Playgroud)
我想将TestRoute配置为
routes.MapRoute(
name: "TestRoute",
url: "home/MyTestDrillDown/{productcat}"
);
Run Code Online (Sandbox Code Playgroud)
但我看到以下错误. 匹配的路由不包含"控制器"路由值,这是必需的.
我的理解是,如果我有一个硬编码的url,那么它直接匹配一个控制器和一个动作,在我的情况下"home/MyTestDrillDown/{productcat}"
匹配HomeController和MyTestDrillDown动作.
我确信我缺少一些非常基本和重要的东西,因为存在一个MapRoute
方法的重载,它只接受Name和Url作为参数.
谢谢
我正在检查新名称是否已存在.
代码1
if(cmbxExistingGroups.Properties.Items.Cast<string>().ToList().Exists(txt => txt==txtNewGroup.Text.Trim())) {
MessageBox.Show("already exists.", "Add new group");
}
Run Code Online (Sandbox Code Playgroud)
否则我可以写:
代码2
foreach(var str in cmbxExistingGroups.Properties.Items)
{
if(str==txtNewGroup.Text) {
MessageBox.Show("already exists.", "Add new group");
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我写了这两个,并认为我正在利用代码1中的语言功能.
......是的:他们都为我工作......我想知道表现: - /
c# ×6
.net ×1
angularjs ×1
asp.net ×1
asp.net-mvc ×1
concurrency ×1
invoke ×1
owin ×1
scope ×1
winforms ×1