我有一个简单的UserControl用于数据库分页,它使用控制器来执行实际的DAL调用.我使用a BackgroundWorker来执行繁重的工作,并在OnWorkCompleted事件中重新启用一些按钮,更改TextBox.Text属性并为父表单引发事件.
表单A保存我的UserControl.当我点击打开表单B的某个按钮时,即使我没有做任何"那里"并且只是关闭它,并尝试从我的数据库中引入下一页,OnWorkCompleted在工作线程上调用它(而不是我的主线程),并抛出一个跨线程异常.
目前我InvokeRequired在那里的处理程序中添加了一个检查,但是不是OnWorkCompleted要在主线程上调用的全部内容?为什么不按预期工作?
编辑:
我已经设法将问题缩小到arcgis和BackgroundWorker.我有以下解决方案,它添加了一个命令到arcmap,打开一个简单Form1的两个按钮.
第一个按钮运行BackgroundWorker睡眠500毫秒并更新计数器.在该RunWorkerCompleted方法中,它检查InvokeRequired并更新标题,以显示该方法最初在主线程或工作线程内运行.第二个按钮刚打开Form2,不包含任何内容.
首先,所有调用RunWorkerCompletedare都在主线程内完成(正如预期的那样 - 这就是RunWorkerComplete方法的最后一点,至少我从MSDN上了解到的BackgroundWorker)
打开和关闭后Form2,RunWorkerCompleted始终在工作线程上调用.我想补充一点,我可以将此解决方案保留原样(InvokeRequired在RunWorkerCompleted方法中检查),但我想了解为什么它会违背我的期望.在我的"真实"代码中,我想知道该RunWorkerCompleted方法是在主线程上调用的.
我设法form.Show();在我的命令中指出问题BackgroundTesterBtn- 如果我使用ShowDialog(),我没有问题(RunWorkerCompleted总是在主线程上运行).我需要Show()在我的ArcMap项目中使用,以便用户不会绑定到表单.
我还尝试在正常的WinForms项目上重现该错误.我添加了一个简单的项目,只打开没有ArcMap的第一个表单,但在这种情况下我无法重现错误 - RunWorkerCompleted主线程上的运行,无论是我使用的Show()还是ShowDialog()在打开之前和之后Form2.我尝试在我之前添加第三个表单作为主要表单Form1,但它没有改变结果.
这是我的简单sln(VS2005sp1) - 它需要
ESRI.ArcGIS.ADF(9.2.4.1420)
ESRI.ArcGIS.ArcMapUI(9.2.3.1380) …
我刚刚开始使用GDAL + python来支持使用ArcGIS python地理处理脚本无法完成的操作.主要是我正在进行栅格和矢量数据的空间建模/分析/编辑.
当需要ArcObject开发而不是GDAL可以使用时,我有点困惑?是否有GDAL不具备的ArcObjects功能?反之亦然吗?我假设ArcObjects在开发在线工具与桌面分析和建模方面更有用,其中差异更多地与偏好有关?在我的情况下,我更喜欢GDAL,因为python支持,我相信ArcObjects缺乏.
谢谢!
我在python中编写了一段代码,将光栅文件转换为ascii.现在,我需要让它处理文件夹中的所有文件.另外,最后保存ascii文件,其名称与添加后缀的原始文件相同.我是python中的新手,我保证我做了功课,我不能让我自己完成批处理工作.任何帮助将非常感谢!!
import arcpy
from arcpy import env
env.workspace = "C:/Data"
inRaster = ("test.img")
outASCII = "c:/output/test3.asc"
arcpy.RasterToASCII_conversion(inRaster, outASCII)
Run Code Online (Sandbox Code Playgroud) 谁能帮我?我正在尝试编写一个代码来读取数据文件夹中的所有文件.这些文件都有不同的扩展名:.shp,.dbf,.sbx,.mxd)我正在使用Windows.谢谢.
我有:
import os
path=r'C:\abc\def\ghi\'
folderList = os.listdir(path)
Run Code Online (Sandbox Code Playgroud)
现在我需要读取文件夹中的所有文件,所以我知道我需要类似的东西
f.open(path)?
我正在使用arcgis javascript apis 3.5,我的代码是
function init() {
map = new esri.Map("mapDiv", {
basemap: "streets",
center: [-112.07102547942392, 46.75909704205151],
zoom: 12,
slider: false
});
var featureLayer = new esri.layers.FeatureLayer("http://abc/arcgis/rest/services/MTARNG/MapServer/0", {
mode: esri.layers.FeatureLayer.MODE_SNAPSHOT,
outFields: ["*"]
});
Run Code Online (Sandbox Code Playgroud)
而在这一层搜索我正在使用findtask.代码在这里
findTask = new esri.tasks.FindTask("http://abc/arcgis/rest/services/MTARNG/MapServer");
findParams = new esri.tasks.FindParameters();
findParams.returnGeometry = true;
findParams.layerIds = [0];
findParams.searchFields = ["LOCATION", "PROJECT_PARCEL_NAME"];
findParams.searchText = "north portion";
findTask.execute(findParams, showResults);
function showResults(results) {
var markerSymbol = new esri.symbol.SimpleMarkerSymbol(esri.symbol.SimpleMarkerSymbol.STYLE_SQUARE, 10, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255, 0, 0]), 1), new dojo.Color([0, 255, 0, 0.25]));
map.graphics.clear(); …Run Code Online (Sandbox Code Playgroud) 我最初实现了Hoey-Shamos算法,但它对于将来的可维护性来说太复杂了(我在这里没有说法),并且没有正确报告,因此我将使用优化的强力算法.
我的问题是:如何优化此代码才能使用?
就目前而言,我的代码包含一个嵌套的for循环,两次迭代相同的列表.
编辑:将线条转换为HashSet并使用两个foreach循环...扫描10,000个约45秒.这还不够.
foreach (Line2D g in lines)
{
foreach (Line2D h in lines)
{
if (g.intersectsLine(h))
{
return false;
}
}
} // end 'lines' for each loop
Run Code Online (Sandbox Code Playgroud)
如果我强制我的"intersectsLine()"方法返回false(出于测试目的),扫描10,000条记录仍然需要8秒(我有700,000条记录).这太长了,所以我需要优化这段代码.
我尝试在将其与所有其他线路进行比较后从列表中删除线路,但是存在准确性问题(不明白为什么)并且速度增加几乎不可察觉.
这是我的intersectsLine方法.我在这里找到了另一种方法,但看起来所有的方法调用和诸如此类的东西都会变慢.在我看来,计算坡度似乎并不需要太多计算(如果我错了,请纠正我?)
public bool intersectsLine(Line2D comparedLine)
{
//tweakLine(comparedLine);
if (this.Equals(comparedLine) ||
P2.Equals(comparedLine.P1) ||
P1.Equals(comparedLine.P2))
{
return false;
}
double firstLineSlopeX, firstLineSlopeY, secondLineSlopeX, secondLineSlopeY;
firstLineSlopeX = X2 - X1;
firstLineSlopeY = Y2 - Y1;
secondLineSlopeX = comparedLine.X2 - comparedLine.X1;
secondLineSlopeY = comparedLine.Y2 - comparedLine.Y1;
double s, …Run Code Online (Sandbox Code Playgroud) 我收到这个错误:
TypeError:'undefined'不是函数(评估'parser.parse()')
这是我的代码.
<script>
require([
"esri/map",
"esri/layers/FeatureLayer",
"esri/dijit/Legend",
"esri/digit/HomeButton",
"dojo/_base/array",
"dojo/parser",
"dijit/layout/BorderContainer",
"dijit/layout/ContentPane",
"dijit/layout/AccordionContainer",
"dojo/domReady!"
], function(
Map, FeatureLayer, Legend, arrayUtils, parser, HomeButton
) {
parser.parse();
var map = new Map("map", {
basemap: "streets",
center: [-87.702733, 41.998508],
zoom: 15
});
var home = new HomeButton ({
map: map
}, "HomeButton");
home.startup();
var circuits = new FeatureLayer("http://54.243.188.50:6080/arcgis/rest/services/TYLIN/Streetlights_Pilot/MapServer/6", {
mode: FeatureLayer.MODE_ONDEMAND,
outFields:["*"]
});
var power = new FeatureLayer("http://54.243.188.50:6080/arcgis/rest/services/TYLIN/Streetlights_Pilot/MapServer/2", {
mode: FeatureLayer.MODE_ONDEMAND,
outFields:["*"]
});
//add the legend
map.on("layers-add-result", function (evt) {
var layerInfo …Run Code Online (Sandbox Code Playgroud) 我已经安全(HTTPS)使用不安全(HTTP)ArcGIS地图服务的ASP.Net MVC 4应用程序.使用JavaScript调用这些服务以获取相关的地图图像.
如果我为我的应用程序使用HTTP,一切都按预期工作.但是,如果我使用HTTPS,IE10和Chrome不显示请求的地图图像(IE提示显示不安全的内容),但Safari显示图像,没有问题.
作为一个例子,说我的应用是HTTPS://app.mydomain.com和我的地图服务是在HTTP://gis.mydomain.com
我运行fiddler并看到响应类似(删除了一些参数以简化):http://gis.mydomain.com/arcgis/rest/services/Energy/BaseService/MapServer/export?....&f = image但图像未显示.如果我将此URL直接输入我的地址栏,则会显示预期的图像.
任何地方都没有报告错误,包括IIS 7.5日志.我意识到混合内容并不理想,但目前我没有选择.关于这类问题,我发现了很多关于SilverLight的引用,但我只使用了javascript和ASP.Net.我还比较了https和http的页面源 - 没有区别.
我正在尝试使用 Python 2.7 的 docx 模块填写 Word 文档表单。我可以很好地修改文本元素,但我很难弄清楚如何选中是或否复选框。
我如何去检查表单中的复选框。我尝试了几种不同的方法,但我认为这一切都是因为我不知道在复选框方面 docx xml 是如何构建的。
我可以使用 Bookmark 属性来查找特定的复选框并如下图所示进行检查吗?
我已在此处将测试表格的副本上传到 Google Drive 。
我使用的是 Esri Javascript API 4.5
当地图加载时,我从外部源获取点坐标,然后使用Graphic类将其绘制在地图上并PopupTemplate为该图形分配一个。
图形已成功绘制在地图上。但是为了查看弹出模板,我需要单击图形。
有没有办法在将图形添加到地图时触发图形的单击事件,以便自动显示弹出模板?
require([
"esri/PopupTemplate",
"esri/Graphic",
.
.
.
.
"dojo/domReady!"
],
function (
PopupTemplate, Graphic, ....) {
var point = {
type: "point",
x: <some x>,
y: <some y>
};
var symbol = {
type: "picture-marker",
url: "/euf/assets/nl/images/red-pin.png",
width: "30px",
height: "30px"
};
var template = new PopupTemplate({
title: "New Title",
content: "New Content"
});
var graphic = new Graphic({
geometry: point,
symbol: symbol,
popupTemplate: template
}); …Run Code Online (Sandbox Code Playgroud)