我有一个带有自定义控件的表单.
我的表格中有一个方法:
private void SetEnabledOnControls(bool val)
{
if (InvokeRequired)
{
Invoke((Action<bool>)SetEnabledOnControls, val);
}
else
{
//do the work - iterate over child controls,
//and they iterate over their children, etc...
}
}
Run Code Online (Sandbox Code Playgroud)
在else分支上的方法内部,我得到了提到的异常:
Cross-thread operation not valid: Control 'txtNumber' accessed from a thread other than the thread it was created on.
我的场景实际上有点复杂 - 我只是将其推断为一个例子.实际上发生的是我正在使用WorkflowFoundation - 我在WorkflowApplication中运行StateMachineActivity(CTP1)(它在自己的线程中运行),我订阅了它的事件,并从那里调用SetEnabledOnControls.此外,我正在使用书签来恢复我的工作流程(而且,旁边有MEF,没有涉及场景).
所有这些都与我对InvokeRequired的明显误解无关 - 如果InvokeRequired为false,我有可能有交叉线程异常吗?我没有"手动"创建任何控件 - 它都在设计者放置的Initialize()中.
任何人都可以对此有所了解吗?
谢谢!
编辑
使用GWLlosa建议,我使用了跟踪ThreadId System.Threading.Thread.CurrentThread.ManagedThreadId.现在来了奇怪的部分...... Initialize()中的线程id是10.在传递前2个状态之间,它带有Id 13 - InvokeRequired为true,并且它被正确调用.但是,在第二个状态之后,当它SetEnabledOnControls再次进入13时,但这次InvokeRequired是假的!怎么会!?当然,后来它无法改变儿童控制(这并不奇怪).可能是表格以某种方式改变了它所生活的线程?
编辑2 现在我打电话给:
if …Run Code Online (Sandbox Code Playgroud) 我花了很多时间使用Microsoft编译器cl,发现它在编译消息中提供的错误代码(如C1234,C5432等)非常有用.当我得到一个我不熟悉的错误时,我可以在MSDN上轻松查找并获得更详细的解释.
现在我几乎完全使用gcc,我发现我错过了这个功能.当我在gcc中遇到一些错误时,我似乎花了很多时间在Google上搜索有关它的信息的错误文本.是否有一些gcc错误消息存储库,其中每个消息更详细地解释?
我试图从Reto Meier的Android 2应用程序开发书中找到一个例子来工作(第202页).根据我的说明,我创建了一个userpreferences.xml,如下所示:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<CheckBoxPreference
android:key="PREF_AUTO_UPDATE"
android:title="Auto refresh"
android:summary="Select to turn on automatic updating"
android:defaultValue="true"
/>
<ListPreference
android:key="PREF_UPDATE_FREQ"
android:title="Refresh frequency"
android:summary="Frequency at which to refresh earthquake list"
android:entries="@array/update_freq_options"
android:entryValues="@array/update_freq_values"
android:dialogTitle="Refresh frequency"
android:defaultValue="60"
/>
<ListPreference
android:key="PREF_MIN_MAG"
android:title="Minimum magnitude"
android:summary="Select the minimum magnitude earthquake to report"
android:entries="@array/magnitude_options"
android:entryValues="@array/magnitude"
android:dialogTitle="Magnitude"
android:defaultValue="3"
/>
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)
我的Preferences类看起来像这样......
public class Preferences extends PreferenceActivity {
SharedPreferences prefs;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.userpreferences);
}
Run Code Online (Sandbox Code Playgroud)
我一直得到一个ClassCastException:java.lang.ClassCastException:java.lang.Integer
12-16 09:28:14.349: ERROR/AndroidRuntime(287): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dt.sample/com.dt.sample.Preferences}: …Run Code Online (Sandbox Code Playgroud) 好吧非常自我解释.我正在使用谷歌地图,我试图找出一个纬度,长点是否在半径为x的圆内(x由用户选择).
边界框不适用于此.我已经尝试使用以下代码:
distlatLng = new google.maps.LatLng(dist.latlng[0],dist.latlng[1]);
var latLngBounds = circle.getBounds();
if(latLngBounds.contains(distlatLng)){
dropPins(distlatLng,dist.f_addr);
}
Run Code Online (Sandbox Code Playgroud)
这仍然会导致标记位于圆圈之外.
我猜这是一些简单的数学需要计算曲率或面积,但我不知道从哪里开始.有什么建议?
对不起,我有时候选择愚蠢...我怎么告诉jQuery给我所有类型为TABLE的"rctable"类的元素?例如
<table class="rctable" ..../>
Run Code Online (Sandbox Code Playgroud) 我想根据类型不同地处理html元素.
使用jquery,如何检查输入类型是否为单选按钮?
我试过了:
if ($('#myElement').is(':radio')) {
....//code here
}
Run Code Online (Sandbox Code Playgroud)
和
if ($('#myElement').is("input[type='radio']")) {
....//code here
}
Run Code Online (Sandbox Code Playgroud)
这些都没有奏效.有任何想法吗?
编辑:
if ($('#myElement').is(':radio')) {
....//code here
}
Run Code Online (Sandbox Code Playgroud)
但是我的单选按钮没有id属性,它们只有一个name属性,这就是为什么它不起作用.
我将代码更改为:
if ($('input[name=' + myElement + ']').is(":radio")) {
....//code here
}
Run Code Online (Sandbox Code Playgroud) 我想在视觉上加入两个重叠的圆圈

变

我已经有了部分圆的方法,但现在我需要知道earch圆的重叠角度有多大,我不知道该怎么做.
有人有想法吗?
好吧,我有一堆具有相同ID"mashupButton"的图像,但是我的印象是,如果我使用"this"创建一个jQuery click函数,而不是"#mashupButton"它只会执行该函数点击图片.这适用于我,但仅适用于页面上具有该ID的第一张图片,并且在我完成一次之后,它不再有效.
文件准备好后:
$("#mashupButton").click(function()
{
$(this).effect("drop", {direction:"up"}, 1000);
});
Run Code Online (Sandbox Code Playgroud)
标签就像:
<a href="#" onClick="differentFunction"><img src="imagename.png" id="mashupButton"></a>
Run Code Online (Sandbox Code Playgroud)
所以要澄清一下:我已经说了10张带有ID mashupButton的图像 - 我点击时会对该特定图像执行jQuery效果.但是它只适用于这些图像的第一个,即使它们都包含相同的ID.我是否需要为每个人提供唯一的ID,或者可以通过这种方式实现?
我只是在考虑当前Web项目的URL。用户可以使用网站访问不同的资源,例如图像。URL看起来像这样http:// localhost:2143 / p / AyuducjPnfnjZGfnNdpAIumehLiWaYQKbZLMeACUqgsYJfsqarTnDMRbwkIxWuDd
现在,我确实需要高性能,一种方法可能是省略对数据库的额外往返身份验证,而仅依靠URL来进行猜测。
Google通过Picasa网络相册来实现此目的,您可以将相册设为私有或不公开。这样可以保护相册,但不能保护照片本身。拍下Skagen(丹麦)的照片;http://lh4.ggpht.com/_Um1gIFfF614/TQpVMvN3hPI/AAAAAAAANRs/GY5DxrDPHUE/s800/IMG_4074.JPG,它实际上在私人相册中,但您都可以看到。
那么您对此有何看法?64个字符长的随机字符串是否足够“安全”?还有其他方法吗?
假设我选择对资源的每个请求进行身份验证。用户已登录somedomain.com上的网站,他们可以在其中访问他们的相册。Cookie被丢弃以维持其身份验证。
现在,实际照片通过某种形式的CDN或存储服务在完全不同的URL上提供。
您将如何维护多个域的身份验证?假设两张专辑的内容可以从不同的服务器传递。